2016-03-04 80 views
2

我在我的package.json以下脚本:构建脚本在Windows上失败,但不能在Linux或OSX

"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上,出现以下错误消息完全失败:

> [email protected] 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. 

任何人都知道为什么这只在Windows上失败,而不是在基于Unix的系统上?

其他信息:

  • OS:视窗8.1和10(与GIT-bash的测试,多方bash和Cygwin的)
  • 版本的NodeJS:5.0.0
  • NPM版本号:3.3.6
+0

看起来应该是由shell处理的报价'''最终被'node'执行。欢迎转义字符地狱 - 在Windows上! –

+0

顺便说一句,如果调用'mkdir'调用Windows内置mkdir命令,则'-p'无效。 (该命令在一个标准的Windows shell中运行,将创建两个文件夹,其中一个名为'-p'。) –

回答

0

将代码移到-e '...'放入文件中,因为内嵌引用由于嵌入引号而存在问题。如果代码位于文件中,您可以将自己从这些问题中解放出来,并且该脚本将更加便于携带并且更易于阅读。

相关问题