require 机制进行
hook,劫持
require 抓取的源文件代码,把源代码转码成
commonjs 规范之后,再传送给
require 机制原本的代码流中。pirates 之类的第三方
npm 包提供了这种添加
hook 的功能。babel-register 便是使用这种方式达到
node 运行
es6 模块文件的目的的。2.1 使用 babel-register 直接运行
es6 模块文件示例目录:
- package.json
- src/
- entry.js # 这里多了一个入口文件,专门用于注册 babel-register
- index.js
- print.js
- ...相关文件:
# package.json
{
"scripts": {
"run": "node src/entry.js"
},
"devDependencies": {
"@babel/core": "^7.1.2",
"@babel/plugin-transform-modules-commonjs": "^7.2.0",
"@babel/register": "^7.0.0"
}
}# src/entry.js # 入口文件必须使用 commonjs 规范来写,因为还没有注册 hook
require('@babel/register')({
plugins: ['@babel/plugin-transform-modules-commonjs']});
require('./index');
# src/index.js
import print from './print';
print('index');
# src/print.js
export default str => {
console.log('print: ' + str);
};
运行:
npm run run结果:
# 命令行打印print: index
这种方式因为中间转码会有额外的性能损耗,所以不建议在生产环境下使用,只建议在开发模式下使用。
2.2 使用babel-node 直接运行
es6 模块文件babel-node 对 babel-register 进行了封装,提供了在命令行直接运行
es6 模块文件的便捷方式。示例目录:
- package.json
- src/
- index.js
- print.js
- ...相关文件:
# package.json
{
"scripts": {
"run": "babel-node src/index.js --plugins @babel/plugin-transform-modules-commonjs"
},
"devDependencies": {
"@babel/core": "^7.1.2",
"@babel/node": "^7.2.0",
"@babel/plugin-transform-modules-commonjs": "^7.2.0"
}
}# src/index.js
import print from './print';









