Clo*_*kex 12 node.js typescript node.js-got
还有几十个其他问题的标题基本相同,但没有一个答案似乎是相关的,只会增加混乱。
这是我的tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"lib": ["es2017", "es7", "es6", "dom"],
"declaration": true,
"outDir": "dist",
"strict": true,
"esModuleInterop": true
},
"exclude": [
"node_modules",
"dist"
]
}
Run Code Online (Sandbox Code Playgroud)
这是我输入的内容:
import md5 from 'js-md5';
import got from 'got';
import { Design } from './Design';
...
Run Code Online (Sandbox Code Playgroud)
这是我的错误:
错误 [ERR_REQUIRE_ESM]:必须使用 import 加载 ES 模块:C:\Users\...\node_modules\got\dist\source\index.js 不支持 ES 模块的 require() 。
什么。我不是在用require,我是在用import。我在任何其他模块上都没有遇到此错误,那么为什么 Got 有所不同(并且为什么没有什么是简单的)?
为什么会发生这种情况以及如何解决它?
根据@jsejcksn 的回答,我尝试将其更改tsconfig.json为以下内容:
{
"compilerOptions": {
"target": "es6",
"module": "esnext",
"lib": ["es2017", "es7", "es6", "dom"],
"declaration": true,
"outDir": "dist",
"strict": true,
"esModuleInterop": true
},
"exclude": [
"node_modules",
"dist"
]
}
Run Code Online (Sandbox Code Playgroud)
...并添加"type": "module"到我的package.json:
{
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.17.1",
"fs-extra": "^10.0.0",
"got": "^12.0.1",
"js-md5": "^0.7.3",
"moment": "^2.29.1",
"semver": "^7.3.5",
"typescript": "^4.4.3",
"uuid": "^8.3.2",
"@types/node": "^16.9.2",
"@types/express": "^4.17.13",
"@types/fs-extra": "^9.0.13",
"@types/semver": "^7.3.9",
"@types/uuid": "^8.3.1",
"@types/js-md5": "^0.4.3"
},
"type": "module"
}
Run Code Online (Sandbox Code Playgroud)
但现在我得到了不同的错误:|
src/Logging.ts:1:20 - 错误 TS2792:找不到模块“时刻”。您的意思是将“moduleResolution”选项设置为“node”,还是将别名添加到“paths”选项?
1 个来自“时刻”的导入时刻;
src/SyncAPI.ts:2:17 - 错误 TS2792:找不到模块“got”。您的意思是将“moduleResolution”选项设置为“node”,还是将别名添加到“paths”选项?
2 从“got”导入;
Den*_*s P 11
就我而言,这个错误是由ts-node-devpackage.json 引起的。
如果您使用相同的包(它通常位于开发依赖项中),您可以检查我在并行线程中发布的package.json解决步骤。希望这可以帮助。
您已配置 TypeScript 将模块编译为 CommonJS 格式(您的 TSConfig 选项compilerOptions.module设置为"commonjs")。您需要将该选项设置为与 ESM 兼容的设置(例如"esnext"),以便 TS 编译器发出的已编译 JavaScript 为 ESM 格式。
在您的 中package.json,您可能还需要将该字段"type"设置为"module"。
编辑:要在导入语句中按名称使用 npm 包作为裸说明符,您还需要将 TSConfig 更新compilerOptions.moduleResolution为"node". 在您当前的配置中,您已包含"dom"在compilerOptions.lib数组中。"dom"适用于具有 DOM 的环境(Node 本身没有 DOM),因此不应该存在。相反,将该数组设置为["es2017"]将包含您指定的其他数组。
编辑:试图提供更直接的指导:
^16.x.x)^4.5.x)./src(如果它们尚未位于该目录中),然后./tsconfig.json:{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"declaration": true,
"esModuleInterop": true,
"lib": [
"es2021"
],
"module": "esnext",
"moduleResolution": "node",
"outDir": "dist",
"strict": true,
"target": "es2021"
},
"include": [
"src/**/*"
]
}
Run Code Online (Sandbox Code Playgroud)
./package.json设置为“模块”:{
// ...
"type": "module"
// ...
}
Run Code Online (Sandbox Code Playgroud)
import此后,您应该不会在语句模块系统兼容性方面遇到任何问题。
| 归档时间: |
|
| 查看次数: |
38364 次 |
| 最近记录: |