如何运行全局安装的节点模块,以--harmony
模式公开shell脚本?
答案 0 :(得分:8)
你可以创建一个" node-harnomy"可执行文件:
<强>的/ usr / local / bin中/节点和谐强>
#!/bin/bash
node --harmony "$@"
<强>和谐-cmd.js 强>
#!/usr/bin/env node-harmony
function* foo() {
}
答案 1 :(得分:4)
TL; DR:只需使用Node 5+,大多数ES6功能都可以立即使用。
这更像是2015年答案的修正案 The reason is because Node.js and io.js have converged,除了io.js支持的项目之外,项目现在更加强大,在保持长期支持(LTS)和supporting lots of ES6 features的同时进行了大量更新。
Node.js 5.0.0 +中可用的显着功能:
我们现在有io.js可用。它具有稳定的ES6规格,可靠,快速,并且是最新的。
根据您想要的ES6功能,您可以使用而不使用任何标记。 From their website:
从v8 3.31.74.1开始,块作用域 声明是有意使用不合规的 严格模式代码的限制。开发人员应该意识到这一点 随着v8继续符合ES6规范的要求,将会改变。
如何用你的东西产生第二个Node进程呢?
#!/usr/bin/env node
var spawn = require("child_process").spawn;
var child = spawn(process.execPath, [ "--harmony", "yourscript.js" ], {
cwd: __dirname
});
child.stdout.on("data", function( data ) {
console.log(data);
});
child.stderr.on("data", function( data ) {
console.error(data);
});
编辑:我相信 process.execPath
会返回节点路径,而不是本案例中的全局脚本路径。
但是,您始终可以直接将其更改为node
,但这可能会破坏PATH中没有节点的安装。
答案 2 :(得分:3)
在发现带有参数的起始节点的a hack之后,我编写了这个脚本以启动我的应用程序并使用生成器支持,并且如果不可用则会出现明显错误。 --harmony
如果不受支持则不执行任何操作。如果您想支持早期节点版本,也可以使用gnode
。
#!/bin/sh
":" //# comment; exec /usr/bin/env node --harmony "$0" "$@"
var generators = require('generator-supported');
if (generators) {
require('../lib');
} else {
console.log('ERROR: node >= v0.11.3 is required for generators');
process.exit(1);
}
答案 3 :(得分:-1)
使用Node.js v5.0,您可以使用最新的/^[CE]/ {ON=1; next}
/^S/ {if (ON) print}
{ON=0}
使用严格模式。
ES2015
/bin/server
然后将下面的行放在package.json脚本
中#!/usr/bin/env node --use_strict
//node.js code.
注意:它适用于Mac OS但不确定Ubuntu等。
答案 4 :(得分:-4)
只需将#!/usr/bin/env node --harmony
放在脚本的顶部即可。但是你应该记住,和声标志在不同的v8版本中公开了不同的功能集,所以你可能没有例如可用于节点0.10的生成器等等。
<强>更新强> 这可能无法在某些系统上运行。在OS X上测试
答案 5 :(得分:-4)
截至本回答时,唯一可行的解决方案是使用gnode的编程API并将bash脚本分成两个单独的文件。
<强> shellScript.js 强>
#!/usr/bin/env node
require('gnode');
require('./main');
<强> main.js 强>
// main shell script logic using generators