Skip to content

善用 Babel 7 搞定 Node.js 中的 ES6 #79

@Dream4ever

Description

@Dream4ever

需求描述

如题。

实施过程

迁移文件

将 bin、controllers、middlewares、models、routes、views、app.js 这些包含 JS 的文件/文件夹,全部移动到 src 文件夹中。

并将 ./src/bin 目录下的 www 重命名为 www.js。

目的:方便后面用 Babel 将指定目录下的文件统一进行编译。

参考资料

搞定开发环境

安装 Babel,用来编译 ES6 代码。

yarn add @babel/core @babel/cli @babel/preset-env @babel/node -D

其中:

  • @babel/core@babel/cli@babel/preset-env 是必备的基础库
  • @babel/node 用于在开发环境下运行包含 ES6 代码的程序

在根目录下创建 .babelrc 这个文件,内容如下:

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

然后在命令行执行下面的命令,看看 Express 项目是否能成功启动:

babel-node ./src/bin/www.js

如果项目成功启动,说明前面的配置 OK,可以在开发环境正常运行项目,那么在 package.jsonscripts 字段中添加如下内容:

  "scripts": {
    "tryrun": "babel-node ./src/bin/www.js",
    "dev": "nodemon --exec npx babel-node ./src/bin/www.js"
  },

tryrun 用于一次执行,dev 用于自动执行最新的代码。

参考资料

补充依赖包

如果要为开发环境和生产环境的 Node.js 传递不同的环境变量,比如 NODE_ENV=production,通常是在 node 命令前面写。但是在 Windows 下直接写要传入的环境变量会报错,所以这个时候需要再安装 cross-env 这个库,来保证在各种操作系统下,都能够正确地传入环境变量。

yarn add cross-env -D

参考资料

生产环境下的编译及执行

添加下面两个库:

yarn add core-js
yarn add regenerator-runtime
  • core-jsregenerator-runtime 用于解决漏网之鱼(ReferenceError: regeneratorRuntime is not defined)

在 ./src/bin/www.js 文件的开头添加下面两行代码,用于解决 Babel 7 编译时,提示 ReferenceError: regeneratorRuntime is not defined 的问题。

import "core-js/stable"
import "regenerator-runtime/runtime"

并在 package.jsonscripts 字段中,新增如下内容:

  "scripts": {
    ...
    "clean": "rimraf dist",
    "build": "babel ./src --out-dir dist",
    "server": "node ./dist/bin/www",
    "prod": "cross-env NODE_ENV=production npm-run-all clean build server"
  },

然后在命令行执行 yarn prod,看看程序能否成功启动,相关代码能否正常执行,如果一切顺利,说明 Babel 7 配置成功。

参考资料

Metadata

Metadata

Assignees

No one assigned

    Labels

    Back-endWhere data really come and goDeploymentDeploy content to serverJSJavascript

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions