node识别es6的 import/export

4,113 阅读1分钟

起因,原本只想搭建一个es6的环境,进行简单的测试。结果发现 node 8 版本虽然支持 es6,但不支持import/export,这就很尴尬。

解决(很简单)

1.1,使用babel手动搭建

首先,NodeJS 是 CommonJS 规范的实现。这样就可以使用 babel 将es6的语法转为 CommonJS 的语法即可。

  1. 需要如下2个关于 babel 的依赖:

npm install babel-register babel-preset-env --save-dev

  1. 需要 .babelrc 文件

下面 2 种方式都可以

  • 使用转换 ES2015+ 的 env preset
{
  "presets":[
    "env"
  ]
}
  • 或直接使用转 CommonJS 的 plugin
{
  "plugins": [
    "transform-es2015-modules-commonjs"
  ]
}
  1. babel-register

当引入之后,之后通过 node 引入的带 .es6, .es, .jsx 和 .js 后缀的所有后续文件都将会被 Babel 转译。

require("babel-register");

1.2,示例

  1. 文档结构
│  .babelrc
│  package.json
└─src
        index.js
        a.js
        b.js
// index.js
require("babel-register")
require('./a')
// a.js
import { bar } from './b'
bar()
// b.js
export function bar () {
    console.log('b')
}

这样 node ./src/index.js 就会输出 b

2,node 9 版本以上,已经支持了 es6的 import/export

查看 Node 官网,现在稳定版还是 8 版本,所以最好还是使用 babel 安全一点。