美文网首页
通过 babel-node 运行 ES6 import/expo

通过 babel-node 运行 ES6 import/expo

作者: redmed | 来源:发表于2019-01-29 14:20 被阅读0次

由于自己经常在本地写一些 js 脚本进行文件处理等工作,常常会使用 import 语法引入模块。但是 Node 在默认情况下是不支持 import 和 export 的。

例如下面的文件

import fs from 'fs';
// do sth...

运行脚本后,会发现 import 语法报错

$ node test.js

(function (exports, require, module, __filename, __dirname) { import fs from 'fs';
                                                                     ^^

SyntaxError: Unexpected identifier
    at new Script (vm.js:79:7)
    at createScript (vm.js:251:10)
    ...

这里我提供一个自己在本地调试 js 代码时常使用的方式:使用 babel-node 命令,来运行含有 import/export 语法的 js 代码。

注意:babel-node 不能用于生产环境!因为 babel-node 会加载更多资源和模块,使得运行环境变「重」。

1. 安装 babel-node

babel-node 命令并非独立安装,在该死的 Babel 7.x 以前,需要通过安装 babel-cli 包获得。而在更该死的 Babel 7.x 以后,babel 的模块被被拆分。因此需要安装 @babel/core @babel/node 两个包来获取。

如果你希望 babel-node 命令在全局可用,使用 -g 参数会让你一劳永逸。

babel 7.x 以前的写法
$ npm i -g babel-cli
babel 7.x 以后的写法
$ npm i -g @babel/core @babel/node

2. 安装 presets 并配置 .babelrc 文件

仅单安装 babel-node 也没用,运行 js 文件后你会发现依然报错。这是因为 babel-nodeimport 语法默认也是关闭的,因此需要安装指定的 preset 并配置 .babelrc 文件来开启语法支持。

截止2019年1月,原有的 babel-preset-es2015 写法已经废弃,与之代替的是 babel-preset-env 或者 @babel/preset-env,目前以后者为推荐。(鬼知道 babel 还会不会再变...)

由于两个 preset 模块对应的属性不同,因此分介绍:

第一种 babel-preset-env 写法
$ npm i babel-preset-env --save-dev

.babelrc 文件配置

{
  "preset": [ "env" ]
}
第二种 @babel/preset-env 写法
$ npm i @babel/preset-env --save-dev

.babelrc 文件配置

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

3. 执行 babel-node

至此经过上述配置,再通过 babel-node 即可执行含有 import/export 等 es6 语法的 js 文件。

$ babel-node test.js

最后切记由于性能问题,babel-node 仅限于在本地调试时使用,上线生产环境的代码还是需要使用 babel 进行转换,再使用 node 运行。

参考资料

babel-node
babel-preset-es2015 -> babel-preset-env
@babel/preset-env

相关文章

  • 通过 babel-node 运行 ES6 import/expo

    由于自己经常在本地写一些 js 脚本进行文件处理等工作,常常会使用 import 语法引入模块。但是 Node 在...

  • Babel

    运行ES6代码: 1. $ babel-node 然后输入es6代码 2. $ babel-node es6.j...

  • node 服务 自动重启

    本文思路 本地使用babel-node 直接运行es6源码。上线时将项目通过babel打包编译到dist目录下之后...

  • 说说 Babel 的 babel-node 工具

    babel-node 工具提供了一个支持 ES6 的 REPL 交互式运行环境。在此环境中,我们可以做一些简单的代...

  • 通过 babel-node 运行 ES6 语法遇到的坑

    1,安装babel-node babel-node在Babel 7.x 之前可通过安装babel-cli获得在Ba...

  • Module 语法

    Module 语法 ES6 模块不是对象,而是通过 export 命令显示指定输出的代码,再通过 import 命...

  • export default和export的使用方式

    ES6 基本 在ES6中,也通过规范的形式,规定了ES6中如何导入和导出模块 导入模块:使用import模块名称f...

  • Node.js 使用 import

    1. 通过 Babel 在 Node.js 上使用 import 特性 1.1 CommonJS ES6 之争 i...

  • export default 和export的使用

    在ES6中也通过规范的形式,规定了如何导入和导出模块 es6中的导入模块 import 模块名称 from 模块标...

  • ES6——模块

    1. export命令 ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输...

网友评论

      本文标题:通过 babel-node 运行 ES6 import/expo

      本文链接:https://www.haomeiwen.com/subject/atxxsqtx.html