提问人:chilly_maximus 提问时间:1/15/2021 最后编辑:chilly_maximus 更新时间:2/1/2022 访问量:5360
如何使用 babel 和节点 14 进行构建?
How to build with babel and node 14?
问:
我正在尝试使用 babel 和目标节点 14.15.4 构建我的项目
我的 .babelrc 是这样的
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": true
}
}
]
]
}
所以我预计 babel 输出将与当前节点兼容。不幸的是,babel 输出一直使用语法而不是 so,因此无法与节点 14 一起运行,这会引发错误require
import
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)
知道我做错了什么吗?
答:
5赞
wheredidthatnamecomefrom
12/19/2021
#1
下面将告诉 babel 不要转换模块:
{
"presets": [
[
"@babel/preset-env",
{
"targets":{"node":"14"},
"modules": false,
}
]
]
}
在此庄园中生成的模块代码将不包含互操作胶水。 是关键。没有它,babel 非常坚持将 CommonJS 兼容语法转译为。此选项禁用所有模块语法转换。此选项会丢弃可兼容性胶水并需要使用。"modules": false
6赞
Daniel
2/1/2022
#2
节点
类型:字符串 |“当前” |真。
如果要针对当前节点版本进行编译,可以指定 “node”: true 或 “node”: “current”,这与 “node”: process.versions.node 相同。
示例:1
{
"targets": "current"
}
示例:2
{
"targets": true
}
示例:3
{
"targets": "process.versions.node"
}
或者,您可以在 browserslist 查询中指定节点版本:
{
"targets": "node 12" // not recommended
}
由于 Node.js 可能在次要版本中支持新的语言功能,因此为 Node.js 12.22 生成的程序可能会在 Node.js 12.0 上引发语法错误。我们建议您始终指定次要版本。
{
"targets": "node 12.0"
}
评论
1赞
Joe Bowbeer
3/27/2022
如果将 targets 指定为要支持的最低环境版本的对象,则:“如果未指定次要版本,Babel 会将其解释为 MAJOR.0。例如,“node”: 12 将被视为 Node.js 12.0 babeljs.io/docs/en/options#targets。
评论
require
require
import
babel src/ -d dist
node dist/index.js
modules:false
preset-env
targets