我正在尝试使用 babel 和目标节点 14.15.4 构建我的项目
我的 .babelrc 是这样的
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": true
}
}
]
]
}
Run Code Online (Sandbox Code Playgroud)
所以我预计 babel 输出将与当前节点兼容。不幸的是 babel 输出继续使用require语法而不是import所以不能在节点 14 上运行,这会引发错误
require("./server.js");
^
ReferenceError: require is not defined
at file:///Users/grzegorz/Projects/charts/server/dist/index.js:3:1
at ModuleJob.run (internal/modules/esm/module_job.js:152:23)
at async Loader.import (internal/modules/esm/loader.js:166:24)
at async Object.loadESM (internal/process/esm_loader.js:68:5)
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
小智 6
类型:字符串 | “当前” | 真的。
如果要针对当前节点版本进行编译,可以指定 "node": true 或 "node": "current",这与 "node": process.versions.node相同。
示例:1
{
"targets": "current"
}
Run Code Online (Sandbox Code Playgroud)
示例:2
{
"targets": true
}
Run Code Online (Sandbox Code Playgroud)
示例:3
{
"targets": "process.versions.node"
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以在 browserslist 查询中指定节点版本:
{
"targets": "node 12" // not recommended
}
Run Code Online (Sandbox Code Playgroud)
{
"targets": "node 12.0"
}
Run Code Online (Sandbox Code Playgroud)
以下将告诉 babel 不要转换模块:
{
"presets": [
[
"@babel/preset-env",
{
"targets":{"node":"14"},
"modules": false,
}
]
]
}
Run Code Online (Sandbox Code Playgroud)
在这个庄园中生成的模块代码将不包含互操作粘合。"modules": false这是关键。如果没有它,babel 会非常坚持转译为 CommonJS 兼容语法。此选项禁用所有模块语法转换。此选项会失去兼容性粘合剂并需要使用。
| 归档时间: |
|
| 查看次数: |
5878 次 |
| 最近记录: |