如何 运行 Node.js 启用 ES6 功能的应用程序?

How to run Node.js app with ES6 features enabled?

我使用 require hook of BabelJS (formerly named 6to5) to run node apps with es6features:

// run.js
require("babel/register");
require("./app.js6");

我调用 node run.js 到 运行 我的 app.js6。我需要安装 BabelJS 并为每个我想使用 es6features 的项目提供 run.js。我更喜欢 nodejs6 app.js6 这样的电话。如何独立实现这个系统(Unix和Windows)?

您可以将带有 --harmony 标志的节点用于 运行 具有 es6 功能的脚本

babel-clibabel-preset-es2015(又名 ES6)依赖项添加到应用程序的 package.json 文件并定义一个 start 脚本:

{
  "dependencies": {
    "babel-cli": "^6.0.0",
    "babel-preset-es2015": "^6.0.0"
  },
  "scripts": {
    "start": "babel-node --presets es2015 app.js"
  }
}

然后您只需对 运行 您的应用程序执行以下命令即可:

npm start

如果您决定停止使用 Babel(例如一旦 Node.js 支持所有 ES6 功能),您可以将其从 package.json 中删除:

{
  "dependencies": {},
  "scripts": {
    "start": "node app.js"
  }
}

这样做的一个好处是 运行 您的应用程序的命令保持不变,如果您正在与其他开发人员合作,这会有所帮助。

I would prefer a call like nodejs6 app.js6.

您可以尝试使用 babel-core 的包装解决方案 api:

// Save as es6.js

var babel = require("babel-core");
var argc = process.argv.length;

babel.transformFile(process.argv[argc - 1], function (err, result) {
    eval(result.code);
});

运行 你的 es6 特色脚本 node es6 thefile.js

参考:官方usage doc

从 babel 6 开始,您现在必须安装 babel-register 并使用以下内容

require("babel-register");

确保同时安装 babel es2015 预设。

您需要安装 babel-register and babel-preset-es2015 preset 用于 babel-register 选项以启用转换 ES6ES5 on-the-fly 转译

 npm install babel-register

 npm install babel-preset-es2015

你的run.js文件:

// require babel-register and set Babel presets options to es2015
require('babel-register')({
   presets: [ 'es2015' ]
});

require("./app.js6");

注意:现在你不需要.babelrc文件来设置Babel presets选项因为我们用require方法设置它

如何使用 es6 支持配置 node.js 应用程序并在文件更改时重新加载服务器


I.Configuration 个步骤(从头开始创建项目):

1.Go 在终端到你的项目主目录

npm init //为项目

创建package.json

2.Install 依赖关系

npm install --save-dev babel
npm install --save-dev babel-cli
npm install --save-dev babel-preset-es2015
npm install --save-dev babel-preset-stage-0 //*1
npm install --save-dev nodemon

1 - 也可以是 stage-1 或 2,这取决于我们要使用的 es 的什么特性

3.We 应该在 package.json 文件中有类似的东西(当然包版本会不同但没关系):

"devDependencies": {
  "babel": "^6.5.2",
  "babel-cli": "^6.16.0",
  "babel-preset-es2015": "^6.16.0",
  "babel-preset-stage-0": "^6.16.0",
  "nodemon": "^1.11.0"
}

4.Create 项目根目录下的.babelrc文件(有package.json文件)

{
 "presets": ["es2015", "stage-0"]
}

5.Create两个目录:

src - 这是工作目录,其中包含用 es6

编写的文件

dist - 这里的文件将使用 babel

编译为 es5

您的项目根目录应如下所示:

  • 项目
    • 来源
      • index.js //主项目文件
    • 距离
    • package.json
    • .babelrc

7.Add 到 package.json 需要命令:

"scripts": {
  "watch": "babel -w src/ -d dist/",
  "build": "babel src/ -d dist/",
  "serve": "babel -w src/ -d dist/ | nodemon --watch dist",
  "test": "echo \"Error: no test specified\" && exit 1"
}

8.Available 命令:

npm run watch //开始监视 src 目录中的变化并编译到 dist

npm run build //从src目录编译文件到dist

npm run serve //它正在监视+启动节点服务器,在每次文件更改时,它将使用正在监视 dist 目录更改的 nodemon 重新启动节点服务器

9.Final 笔记

  • 服务器将运行dist/index.js文件作为主文件
  • 文件dist/index.js将从src/index.js编译而来,所以应该有项目的主文件。
  • dist 目录应该被 git 添加到忽略(但如果它将是一个节点包,则不会为 npm 忽略它)

10.Run 服务器并开始在 src 目录中创建应用程序。

npm run serve

二.更简单的方法(准备使用样板)

如果对您来说积分太多,那么 github 上提供了完整的 woking 样板 - https://github.com/maciejsikora/node-express-babel-boilerplate

  1. node -r babel-register scripts.js

这是最好的解决方案

  1. npx babel-node scripts.js

!Babel 节点在退出过程中无法正常工作,kexec 包在这种情况下也无济于事(如我所试)

在这两种情况下,您都需要使用 .babelrc,它应该描述您应用的预设和插件。

npx 仅用于执行未安装 npmyarn 的库。否则你需要 npm i -g babel-cli 然后 babel-node script.js

参考这个:

或此样板文件:

Boilerplate: node-es6

npm init es6

它使用 "type": "module" 设置创建一个 package.json 文件。