Node.js 生成脚本在windows上失败,但在linux或OSX上失败

Node.js 生成脚本在windows上失败,但在linux或OSX上失败,node.js,windows,bash,shell,cmd,Node.js,Windows,Bash,Shell,Cmd,我的package.json中有以下脚本: "scripts": { "pretest": "mkdir -p build && node -e 'process.stdout.write(\"export var version = \\\"\" + require(\"./package.json\").version + \"\\\";\\n\");' > build/version.js && rollup -f umd -n d3_rand

我的package.json中有以下脚本:

"scripts": {
    "pretest": "mkdir -p build && node -e 'process.stdout.write(\"export var version = \\\"\" + require(\"./package.json\").version + \"\\\";\\n\");' > build/version.js && rollup -f umd -n d3_random -o build/d3-random.js -- index.js"
}
它在Windows上以独占方式失败,并显示以下错误消息:

> d3-random@0.2.1 pretest C:\Users\Pepe\Dropbox\workspace\d3-random
> mkdir -p build && node -e 'process.stdout.write("export var version = \"" + require("./package.json").version + "\";\n");' > build/version.js && rollup -f umd -n d3_random -o build/d3-random.js -- index.js

[eval]:1
'process.stdout.write(export var version = "
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

SyntaxError: Unexpected token ILLEGAL
at Object.exports.runInThisContext (vm.js:53:16)
at Object.<anonymous> ([eval]-wrapper:6:22)
at Module._compile (module.js:425:26)
at node.js:587:27
at doNTCallback0 (node.js:428:9)
at process._tickCallback (node.js:357:13)
npm ERR! Test failed.  See above for more details.
>d3-random@0.2.1预测试C:\Users\Pepe\Dropbox\workspace\d3 random
>mkdir-p build&node-e'process.stdout.write(“导出变量版本=\”“+require(“./package.json”)。版本+“\”;\n”);”>build/version.js&&rollup-f umd-n d3_random-o build/d3-random.js--index.js
[评估]:1
'process.stdout.write(导出变量版本='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError:意外标记非法
在Object.exports.runInThisContext(vm.js:53:16)
at对象。([eval]-包装器:6:22)
在模块处编译(Module.js:425:26)
在node.js:587:27
在doNTCallback0(node.js:428:9)
在进程中调用(node.js:357:13)
npm ERR!测试失败。有关详细信息,请参阅上文。
有人知道为什么这只在Windows上失败,而在基于Unix的系统上失败吗

其他信息:

  • OS:Windows 8.1和10(使用git bash、win bash和cygwin进行测试)
  • NodeJS版本:5.0.0
  • npm版本:3.3.6

-e'…'
中的代码移动到一个文件中,因为内联是有问题的,因为嵌入了引号。如果代码在一个文件中,您就可以摆脱这些问题,脚本将更便于移植和阅读。

看起来应该是由shell处理的引号的
最终会以某种方式结束由
节点执行
。欢迎在Windows上转义字符hell-on!顺便说一句,如果对
mkdir
的调用正在调用Windows内置mkdir命令,
-p
无效。(该命令在标准Windows shell中运行,将创建两个文件夹,其中一个文件夹名为
-p