我正在尝试使用 babel 和目标节点 14.15.4 构建我的项目
我的 .babelrc 是这样的
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": true
        }
      }
    ]
  ]
}
所以我预计 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)
知道我做错了什么吗?
小智 6
类型:字符串 | “当前” | 真的。
如果要针对当前节点版本进行编译,可以指定 "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
}
{
  "targets": "node 12.0"
}
以下将告诉 babel 不要转换模块:
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets":{"node":"14"},
        "modules": false,
      }
    ]
  ]
}
在这个庄园中生成的模块代码将不包含互操作粘合。"modules": false这是关键。如果没有它,babel 会非常坚持转译为 CommonJS 兼容语法。此选项禁用所有模块语法转换。此选项会失去兼容性粘合剂并需要使用。
| 归档时间: | 
 | 
| 查看次数: | 5878 次 | 
| 最近记录: |