如何从javascript源设置nodejs解释器参数

时间:2015-09-26 14:39:26

标签: node.js

我有一些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参数?

1 个答案:

答案 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" "$@"