繁体   English   中英

如何使用Babel进行CLI程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM