Babel.js 如何用巴别塔和14号节点建造?

k2fxgqgv  于 2022-12-16  发布在  Babel
关注(0)|答案(2)|浏览(150)

我试图建立我的项目与巴别塔和目标节点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)

知道我做错了什么吗?

t9eec4r0

t9eec4r01#

节点

类型:字符串|“当前”|没错。
如果要针对当前节点版本进行编译,可以指定“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"
}

信息来自这里!

niwlg2el

niwlg2el2#

下面的代码将告诉babel不要转换模块:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets":{"node":"14"},
        "modules": false,
      }
    ]
  ]
}

在这种情况下生成的模块代码将不包含操作间粘合。"modules": false是关键。没有它,babel非常坚持将堆栈转换为CommonJS兼容语法。此选项禁用所有模块语法转换。此选项删除兼容性粘合,并要求使用。

相关问题