"register"在"babel/register"中意味着什么



为了在 Babel 中进行运行时转换,您需要要求并使用 babel-core/register 。我不知道register在这个意义上意味着什么,即实际的定义。

该页面不是很有帮助。

这到底是什么意思?

babel 的目的是将你的 js 当前代码转换为你正在使用的给定环境、工具和框架的可理解的 js 版本。这些各不相同,如下所述,如何使用 Babel 与您选择的工具。在节点环境中,babel 不作为其核心 API 的一部分存在,因此需要先将其添加为 npm 包,(我的示例适用于 @babel 7.x(。由于 babel 是分开的以适应不同的工具,我们需要为核心功能添加 @babel/核心以及 @babel/preset-env,从而为 ES2015+ 启用转换。

npm install @babel/core @babel/preset-env --save-dev

npm i -D @babel/core @babel-preset

现在,当我们使用 Babel 时,我们希望通过在根目录中设置 .babelrc 文件来告诉节点可用的预设,更多关于这里的信息

{
  "presets": ["@babel/preset-env"]
}

现在进入寄存器方面。由于这里解释的 ES6 模块的性质,如果我们想在没有 webpack 或 rollup 等构建步骤的情况下运行 babel,并且"动态"使用 babel 运行文件,我们需要将 babel 注册到 node 的运行时 require 钩子会将自身绑定到节点的需求,并在运行时自动编译文件。这相当于 CoffeeScript 的 coffee-script/register。来自 Babel Usage Docs 的 Babel-Register 参考资料 这里.因此,除了之前的 npm 安装外,我们还需要添加@babel/register

npm install @babel/register --save-dev

npm i -D @babel/register

现在我们可以使用它,要么通过两种方式之一在应用程序文件中要求"@babel/注册",要么在文件中(通常,在作为应用程序中的入口点并包含其他文件要求的index.js文件中(要么在使用 cli 时将其添加。

// in .js file
require("@babel/register");

// in command line, don't add it to the .js file but instead use the -r flag for require
npx -r @babel/register index.js

(更多关于NPX的信息可以在这里找到(

作为添加 .babelrc 的一个选项,可以通过在 package.json 文件中添加一个"babel"属性作为选项来跳过它,例如。

//package.json in root
...,
"babel": {
  "presets":[
    "@babel/preset-env"
   ]
},
...

虽然上面是针对 babel 7 的,但 babel 6 中的一个例子可以从一位伟大的老师的 github 中找到,Josh Miller,在这里(查看他的 package.json 文件(希望这有助于了解"注册"需求。

简短回答 => Babel 可以在 2 种情况下帮助我们:

1. 在没有构建代码的情况下运行代码(动态转换代码 - 运行时编译(:

  • 巴别寄存器方法:
require("@babel/register")();
  • 巴别节点方法:
babel-node index.js

阅读更多:babel-node vs babel-register

2. 构建代码

babel src --out-dir lib

最新更新