Node-gyp(或gyp)动作目标包含=,&在Linux上

时间:2016-06-22 22:45:16

标签: node-gyp gyp

我在Linux上使用node-gyp并且需要使用操作来定义自定义构建步骤(请注意这是一个节点gyp问题还是一般gyp问题)。

documentation似乎建议您应该将构建步骤的命令指定为字符串数组,这些字符串必须在某些时候连接在一起以形成命令:

'action': ['python', 'tools/js2c.py', '<@(_outputs)', 'CORE', '<@(core_library_files)'],

由于它是Linux,node-gyp将为binding.gyp文件中的每个目标生成一个makefile,对于action,custom命令将出现在该makefile中。

我遇到的问题是命令需要包含一个=符号来设置一个环境变量作为命令的一部分,我需要用&amp;&amp;来链接命令,例如:

export FOO=BAR && do-something-else --option

如果我尝试将其指定为gyp操作步骤,我会遇到各种问题。我尝试将命令中的每个'word'添加为一个单独的数组元素。

'action': ['export', 'FOO=BAR', '&&', 'do-something-else', '--option'],

这不起作用,gyp(或命令传递给shell的shell)抱怨'&amp;&amp;'不是有效的标识符。

窥视生成的makefile,该命令已扩展为this,这解释了shell错误:

export "FOO=BAR" "&&" do-something-else --option

引号留在变量赋值和&amp;&amp;附近。目前尚不清楚为什么。我已经尝试了许多变化来阻止这种情况发生无济于事。任何包含=或&amp;的东西最后留下引号,这在大多数情况下会使命令语法无效。

建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

发生这种情况的原因是,Gyp认为第一个单词之后的所有内容都是第一个单词中给出的命令的参数,因此它引用了这些字符和其他特殊字符以防止shell解释它们。我认为没有任何方法可以阻止它,正如您发现的那样,几乎不可能使用外壳程序命令管道来创建自定义命令。