-
Notifications
You must be signed in to change notification settings - Fork 6
善用 Babel 7 搞定 Node.js 中的 ES6 #79
Copy link
Copy link
Closed
Labels
Back-endWhere data really come and goWhere data really come and goDeploymentDeploy content to serverDeploy content to serverJSJavascriptJavascript
Description
需求描述
如题。
实施过程
迁移文件
将 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.json 的 scripts 字段中添加如下内容:
"scripts": {
"tryrun": "babel-node ./src/bin/www.js",
"dev": "nodemon --exec npx babel-node ./src/bin/www.js"
},tryrun 用于一次执行,dev 用于自动执行最新的代码。
参考资料
- How to enable ES6 (and beyond) syntax with Node and Express:给出了 Babel 7 建议安装的库,Babel 执行环境的设置,以及运行程序的命令。
补充依赖包
如果要为开发环境和生产环境的 Node.js 传递不同的环境变量,比如 NODE_ENV=production,通常是在 node 命令前面写。但是在 Windows 下直接写要传入的环境变量会报错,所以这个时候需要再安装 cross-env 这个库,来保证在各种操作系统下,都能够正确地传入环境变量。
yarn add cross-env -D参考资料
- How to set environment variables in a cross-platform way?:解决不同操作系统下,向 Node.js 传递环境变量的问题。
生产环境下的编译及执行
添加下面两个库:
yarn add core-js
yarn add regenerator-runtimecore-js、regenerator-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.json 的 scripts 字段中,新增如下内容:
"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 配置成功。
参考资料
- Babel 7 - ReferenceError: regeneratorRuntime is not defined:用 Babel 7 编译出错,提示 ReferenceError: regeneratorRuntime is not defined,这个链接里给出了解决方案。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Back-endWhere data really come and goWhere data really come and goDeploymentDeploy content to serverDeploy content to serverJSJavascriptJavascript