提问人:samala7800 提问时间:11/16/2023 更新时间:11/16/2023 访问量:47
ES 模块的 require() ERR_REQUIRE_ESM错误
Error ERR_REQUIRE_ESM require() of ES Module
问:
我知道这是一个流行的错误,但是,我不明白为什么我在这一点上得到它,或者如何解决它。我有一个 TS 项目,我将其编译为 JS 并运行。要构建项目,我只需运行
tsc -p tsconfig.json
然后运行我运行的项目
node ./build/index.js
我有很多现代软件包,比如
"dependencies": {
"@fastify/cookie": "^8.3.0",
"@fastify/cors": "^8.1.0",
"@fastify/multipart": "^8.0.0",
"@fastify/websocket": "^7.0.1",
"@prisma/client": "^5.5.2",
"fastify": "^4.6.0",
"file-type": "^18.7.0",
"mime-types": "^2.1.35",
"nodemailer": "^6.8.0",
"openai": "^3.1.0",
"pg-error-enum": "^0.6.0",
"ts-loader": "^9.4.2",
"useragent": "^2.3.0"
},
"devDependencies": {
"@types/jest": "^29.5.8",
"@types/mime-types": "^2.1.1",
"@types/node": "^18.7.20",
"@types/nodemailer": "^6.4.6",
"@types/useragent": "^2.3.1",
"@types/ws": "^8.5.3",
"jest": "^29.7.0",
"nodemon": "^2.0.20",
"prisma": "^5.5.2",
"ts-jest": "^29.1.1",
"typescript": "^5.2.2"
},
并且一直没有问题,直到有一天我添加了文件类型
这个包似乎和其他包一样现代。然而,我一导入它就收到这个错误。
Error [ERR_REQUIRE_ESM]: require() of ES Module C:\xx\node_modules\file-type\index.js from C:\xx\build\File.js not supported.
Instead change the require of index.js in C:\xx\build\File.js to a dynamic import() which is available in all CommonJS modules.
我的ts配置文件就是这样
{
"compilerOptions": {
"declaration": true
"composite": true
"declarationMap": true
"target": "es2021"
"module": "commonjs"
"rootDir": "./src"
"moduleResolution": "node"
"sourceMap": true,
"outDir": "build",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true
},
"ts-node": {
"compilerOptions": {
"module": "commonjs"
}
}
}
我真的尝试过改变这些领域中的许多,也增加了我的主要package.json,但我所做的一切都破坏了其他东西。type: module
在我看来,不知何故,是我添加的第一个原生使用导入/导出的包,而像 fastify 这样的东西似乎在其实际源代码或构建代码中使用了 require()。我可以不支持同时使用这两种类型的软件包吗?file-type
答:
0赞
samala7800
12/3/2023
#1
为了解决这个问题,我不得不做一些事情
- 将我的tsConfig.json选项从 更改为
module
commonjs
es2022
- 将我的tsConfig.json更改为
ts-node.compilerOptions.module
es2022
- 添加是因为 Typescript 或 Node 开发人员拒绝在没有扩展的情况下支持,例如 .
tsc-alias
import { thing } from './myfile'
.js
import { thing } from './myfile.js'
请注意,我不使用打包器,我只是使用打字稿构建,因此如果您使用 webpack,则不需要 #3。可能。
评论