我正在尝试使用Babel在节点上编写一些CLI程序.我见过问题
How do I use babel in a node CLI program?,那里有
loganfsmyth说:
Ideally you’d precompile before distributing your package.
好的,现在我正在使用:
"scripts": { "transpile": "babel cli.js --out-file cli.es5.js","prepublish": "npm run transpile",}
但是,当Babel添加’use strict’时,我遇到了问题;排在#!/usr/bin/env节点标题后面.例如,如果我有cli.js:
#!/usr/bin/env node import pkg from './package' console.log(pkg.version);
我会得到这个:
#!/usr/bin/env node'use strict'; var _package = require('./package'); … ……
这不起作用.当我尝试运行它时,我总是得到:
/usr/bin/env: node'use strict';: This file or directory does'nt exist
我怎样才能解决这个问题?
解决方法
来自@DanPrince的解决方案是完全可以接受的,但还有另一种选择
cli.js
保留此文件es5
#!/usr/bin/env node require("./run.es5.js");
run.js
// Put the contents of your existing cli.js file here,// but this time *without* the shebang // ...
将脚本更新为
"scripts": { "transpile": "babel run.js > run.es5.js",}
这里的想法是cli.js垫片不需要传送,所以你可以将你的shebang保存在该文件中.
cli.js将只加载run.es5.js,这是run.js的babel-transiled版本.