将项目表单 * CJS * 转换为 * ESM *
我正在尝试将我当前的TypeScript-Node项目从ESM转换为CJS,但是,我一直收到下面的错误
Error [ERR_MODULE_NOT_FOUND]: Cannot find module` 'redacted/dist/config/datadog'
imported from /redacted/dist/app.js
这是**app.ts
中导入的外观:**
import './config/datadog';
这是**app.js
**的外观
import './config/datadog';
这是我的datadog.ts文档
datadog.ts
import tracer from 'dd-trace';
tracer.init({
logInjection: true,
profiling: true,
appsec: true
});
export default tracer;
下面是我通过~/$ node dist/app.js
执行应用程序时收到的错误的完整打印输出。
> node dist/app.js
node:internal/errors:465
ErrorCaptureStackTrace(err);
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'redacted/dist/config/datadog' imported from /redacted/dist/app.js
at new NodeError (node:internal/errors:372:5)
at finalizeResolution (node:internal/modules/esm/resolve:405:11)
at moduleResolve (node:internal/modules/esm/resolve:966:10)
at defaultResolve (node:internal/modules/esm/resolve:1176:11)
at ESMLoader.resolve (node:internal/modules/esm/loader:605:30)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:318:18)
at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:80:40)
at link (node:internal/modules/esm/module_job:78:36) {
code: 'ERR_MODULE_NOT_FOUND'
}
Node.js v18.0.0
Process finished with exit code 1
使用ts-node运行时工作正常
node --experimental-specifier-resolution=node --loader ts-node/esm app.ts --project tsconfig.json
我已将tsconfig.json
文件配置为:
{
"compilerOptions": {
"target": "ES2020",
"module": "ES2020",
"lib": ["ES2020"],
"moduleResolution": "node",
"esModuleInterop": true,
"rootDir": "./src",
"outDir": "./dist",
"forceConsistentCasingInFileNames": true,
"strict": true,
}
}
- 编辑**
我已经在GitHub上发布了code
2条答案
按热度按时间t5fffqht1#
您需要使用TypeScript v4.7,这是当前的TS-Next版本
升级到
typescript@next
(可通过执行~/$ npm install -D typescript@next
命令完成)后,您需要对tsconfig.json
文件进行以下更改。总结
您必须按如下所示设置
tsconfig.json
键module
和moduleResolution
。1.模块分辨率:"下一个节点"
module: "NodeNext"
您将需要TypeScript v4.7
就我个人而言,我保留了一个全局属性,所以下面我展示了全局安装的命令,但你真正需要的是将它作为当前项目的依赖项添加到你的
node_modules
目录中。1.#####
~$ sudo npm i -g typescript@next // Global Install
1.#####一米九一x
我不能帮助任何IDE的存在,但如果你使用VSCode,使用以下配置,使您的项目使用版本v4.7。
然后,您需要设置以下配置
一米十一秒
您还需要在中为Node ..启用ESM。为此,您需要将以下内容添加到
package.json
.mts
)**文件扩展名。两者都有优点,但讨论优点超出了本答案的范围。应该是这样。听起来很难,但实际上只要你以前做过,就很容易了。
另一个有用的资源:
此链接上的答案更详细地介绍了这一主题。我建议您查看一下。
xoshrz7s2#
我只是想感谢JayDev的回答。它解决了我的问题。(我不能反对他的帖子,因为他不允许我有愚蠢的理由)。