我有一些Script.js需要一些节点选项才能正确运行。例如。 (假设我们有节点0.12.7):
node --harmony someScript.js
我希望在没有--harmony选项的情况下运行它,并以某种方式将其设置在脚本中。
我尝试更改process.execArgv:
process.execArgv.push('--harmony');
function getGenerator() {
return function *() {
yield 1;
};
}
var gen = getGenerator();
由于NodeJS是解释器,它可以允许这样的设置更改(即使在运行中)。但是,NodeJS似乎忽略了process.execArgv的变化。
我也尝试了v8.setFlagsFromString:
有趣的是,所有需要的NodeJs版本 - 支持生成器的和谐都不包含v8模块。 所以,我用NodeJS 4.1.1进行了实验
var v8 = require('v8');
var vm = require('vm');
v8.setFlagsFromString('--harmony');
var str1 =
'function test1(a, ...args) {' +
' console.log(args);' +
'};';
var str2 =
'function test2(a, ...args) {' +
' console.log(args);' +
'};';
eval(str1);
test1('a', 'b', 'c');
vm.runInThisContext(str2);
test2('a', 'b', 'c');
不幸的是,即使对于eval()和vm.runInThisContext(),v8.setFlagsFromString('--harmony')
也无济于事。
我希望避免创建一些包装脚本。
那么,是否有其他方法可以从javascript源设置nodejs参数?
答案 0 :(得分:0)
如果有人会有这样的someScript.js:
#!/bin/sh
":" //# comment; exec /usr/bin/env node --harmony "$0" "$@"
function test(a, ...args) {
console.log(args);
}
test('a', 'b', 'c');
然后“sh someScript.js”命令将使用someScript.js中指定的解释器和参数。
如果有人会标记someScript.js可执行文件(chmod u + x someScript.js)。然后./someScript.js
命令也会起作用。
这篇文章很有帮助: http://sambal.org/2014/02/passing-options-node-shebang-line/
此外,如果您使用Windows EOL,则会出现'\ r'添加到最后一个脚本参数的错误。如果没有参数,则会有一个('\ r')。
<强>更新强>
有些shell允许使用
#! /usr/bin/env node --harmony
而不是
#!/bin/sh
":" //# comment; exec /usr/bin/env node --harmony "$0" "$@"