[英]How can I use Babel for CLI program?
我正在尝试使用Babel在节点上编写一些CLI程序。 我见过问题如何在节点CLI程序中使用babel? loganfsmyth说:
理想情况下,您需要在分发包之前进行预编译。
好的,现在我正在使用:
"scripts": {
"transpile": "babel cli.js --out-file cli.es5.js",
"prepublish": "npm run transpile",
}
但是,当Babel添加'use strict';
时,我遇到了问题'use strict';
排在#!/usr/bin/env node
标题后面。 例如,如果我有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",
"prepublish": "npm run transpile",
}
这里的想法是cli.js
垫片不需要传送,所以你可以将你的shebang保存在该文件中。
cli.js
只会加载run.es5.js
这是巴贝尔,transpiled版本run.js
。
您可以使用另一个NPM脚本将shebang添加为构建过程的最后一部分。 它不漂亮,但它的工作原理。
"scripts": {
"transpile": "babel cli.js --out-file es5.js",
"shebang": "echo -e '#!/usr/bin/env/node\n' $(cat es5.js) > cli.es5.js",
"prepublish": "npm run transpile && npm run shebang",
}
然后你的原始cli.js
将成为
import pkg from './package'
console.log(pkg.version);
生成的es5.js
文件变为
'use strict';
var _package = require('./package');
最后, cli.es5.js
变成了
#!/usr/bin/env node
'use strict';
var _package = require('./package');
这可以通过干净的脚本来改进。
"scripts": {
"transpile": "babel cli.js --out-file es5.js",
"shebang": "echo -e '#!/usr/bin/env/node\n' $(cat es5.js) > cli.es5.js",
"clean": "rm es5.js cli.es5.js",
"prepublish": "npm run clean && npm run transpile && npm run shebang",
}
当然,这需要您使用bash(或某些备用兼容shell)的系统,但是您可以通过重写构建脚本以使用ShellJS之类的命令来实现这些命令的节点实现,从而使其成为跨平台。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.