node.js - 无法运行 TS 节点 + ES 应用程序 - 获取 `ERR_UNKNOWN_FILE_EXTENSION` 或 `new ERR_MODULE_NOT_FOUND`
问题描述
我正在尝试将我的代码编译为 ES 代码("type": "module"
在 package.json 和"module": "esnext"
tsconfig.json 内部使用)。
我无法使用以下 3 种方法中的任何一种来运行它:
ts-node src/server.ts
结果是:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/src/server.ts
at new NodeError (node:internal/errors:363:5)
at Loader.defaultGetFormat [as _getFormat] (node:internal/modules/esm/get_format:71:15)
at Loader.getFormat (node:internal/modules/esm/loader:105:42)
at Loader.getModuleJob (node:internal/modules/esm/loader:243:31)
at Loader.import (node:internal/modules/esm/loader:177:17)
at Object.loadESM (node:internal/process/esm_loader:68:5)
从这个线程来看,这似乎是 ts-node 的问题。
- 所以我试着
node --loader ts-node/esm ./src/server.ts
得到这个:
(node:45543) ExperimentalWarning: --experimental-loader is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:383
throw new ERR_MODULE_NOT_FOUND(
^
CustomError: Cannot find module '/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/src/app' imported from /Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/src/server.ts
at finalizeResolution (/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:383:11)
at moduleResolve (/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:818:10)
at Object.defaultResolve (/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/dist-raw/node-esm-resolve-implementation.js:929:11)
at /Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/src/esm.ts:68:38
at Generator.next (<anonymous>)
at /Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/dist/esm.js:8:71
at new Promise (<anonymous>)
at __awaiter (/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/dist/esm.js:4:12)
at resolve (/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/node_modules/ts-node/dist/esm.js:32:16)
at Loader.resolve (node:internal/modules/esm/loader:89:40)
但是 src/app.ts 显然就在文件夹中!
- 所以我尝试先编译
tsc
然后运行node --loader ts-node/esm ./dist/src/server.js
. 我得到与(2)几乎相同的错误,除了这次它/Users/ilmoi/Dropbox/crypto_bc/dbricks/mvp/server/dist/src/app
丢失了。这也没有任何意义,因为我可以在文件夹中看到它。
我该如何解决这个问题?我已经阅读了堆栈溢出的每个线程,但我没有选择。为什么运行一个 ES 节点应用程序这么难?
解决方案
遇到了同样的问题。通过遵循此 ts-node 问题修复。
TL;DR 只需将.js
扩展添加到您的模块导入并运行 ts-nodenode --loader ts-node/esm src/index.ts
推荐阅读
- javascript - 在每次点击时创建一个新的过渡实例(反应过渡组)
- r - 如何创建一个根据条件延迟嵌套循环或不延迟的函数
- nock - Nock“与请求不匹配”与正则表达式
- c++ - 与静态成员相关的模板专业化错误
- python - 使用 Python,有没有更优雅的方法来查找列表中的第二大数字?
- javascript - javascript中未定义的数组变量
- android - 具有类似于活动的共享元素的片段转换
- python-3.x - 如何等到元素的文本更改为字符串以外的其他内容?
- node.js - [tokio-rs][documentation] 具有共享状态示例的多个异步“子应用程序”?
- angular - “可观察”类型上不存在属性“json”
'