【发布时间】:2016-03-04 22:22:23
【问题描述】:
我的 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.
有人知道为什么这只会在 Windows 上失败,而不是在基于 Unix 的系统上吗?
附加信息:
- 操作系统:Windows 8.1 和 10(使用 git-bash、win-bash 和 cygwin 测试)
- NodeJS 版本:5.0.0
- npm 版本:3.3.6
【问题讨论】:
-
看来
'应该是由shell 处理的引号,最终却被node执行。欢迎逃离角色地狱 - 在 Windows 上! -
顺便提一下,如果对
mkdir的调用正在调用 Windows 内置 mkdir 命令,则-p无效。 (该命令在标准 Windows shell 中运行,将创建两个文件夹,其中一个名为-p。)
标签: node.js windows bash shell cmd