我开发了一个node.js npm模块,在Windows下开发。今天我写了一些Mocha测试。经过多次挣扎,似乎npm test
工作,package.json
必须看起来像这样:(可能还有其他选择???)
"scripts": { "test": "node node_modules/mocha/bin/mocha" }
而不是所有基于Unix的书中的内容,
"scripts": { "test": "./node_modules/.bin/mocha" }
如何将package.json设置为在Windows和Unix上运行?我假设Travis-CI运行Unix,所以,如果我将构建链接到那个,它将会破坏Windows版本。
我找到了一个两年前的帖子,有人要求提供一个功能。那个线程似乎消失了。这SO question似乎很接近,但这并不是我想要的,坦率地说,我无法理解答案。 :-(任何人都可以澄清一下吗?
暂时,我要去
"scripts": {
"test": "node node_modules/mocha/bin/mocha",
"testOnUnixUseThis" : "./node_modules/.bin/mocha (I think)",
"testOnWindowsUseThis" : "node node_modules/mocha/bin/mocha"
},
很遗憾,你不能去npm test testOnWindowsUseThis
或npm testOnWindowsUseThis
。它并没有解决Travis-CI问题。但至少下载该模块的人可以(希望)看到发生了什么。
有更好的想法吗?我是唯一仍在Windows下开发的人吗??? : - )
答案 0 :(得分:36)
我一直能够npm install -g mocha
或npm install mocha
,然后只需添加
"scripts": {
"test": "mocha spec"
}
到package.json。这可能会或可能不会在每个环境中工作。我知道,例如,对于线卫,你必须使用bin / mocha。此外,如果你找不到解决方法,请为Unix设置测试脚本,然后添加第二个名为“wintest”的脚本,或者在Windows中执行任何你需要它做的事情。您可以根据需要为脚本命名。默认值(测试,开始等)可与npm [command]
一起使用;任何非标准的(如wintest)都可以与npm run-script [command]
一起使用,它们仍然可以使用。
关于如何/为何如此有用的一个小故事:
当您全局安装模块时,它可以在PATH上使用(或者等效的Windows)。当您安装项目依赖项时,如果该模块有任何二进制文件,那么这些二进制文件符号链接到node_modules/.bin
,当您运行npm run [some-command]
时,npm帮助将node_modules/.bin
添加到该命令的PATH < / em>的。因此,当全局安装mocha时"test": "mocha spec"
使用全局安装的mocha来运行测试。当它是项目依赖项时,它使用node_modules/.bin
中的那个。我发现这个问题是npm将node_modules/.bin
添加到PATH的前面,因此本地二进制文件总是优先于全局二进制文件。 几乎所有的时间,这就是你想要的,但值得知道它是如何工作的(我最近有一个与此相关的错误)。
编辑:
不确定npm历史记录中的哪一点发生了变化,但npm run <script-name>
现在有效(不再需要npm run-script <script-name>
)。可能run-script
仍然有用。我期待它,但我没有尝试过。
答案 1 :(得分:15)
如何将package.json设置为在Windows和Unix上运行?
如果你
......这是一个有效的解决方案
"scripts": {
"test": "node node_modules/mocha/bin/mocha.js"
},
备注强>:
node
放在前面不应该有害,并且可以在Windows上提供帮助(.js扩展名不一定注册到nodejus可执行文件,除非你这样设置。可以打开文本编辑器,IDE或者(更糟糕的)Windows脚本主机,Internet Explorer ...)答案 2 :(得分:10)
不要使用全球解决方案,我建议您遵循Mocha的人say:
"scripts": {
"test": "node_modules/.bin/mocha -w"
},
答案 3 :(得分:5)
使用npm i mocha --save-dev
这会将模块保存为开发依赖项,npm将自动设置要在scripts
对象中使用的可执行文件。如果您想使用package.json中定义的脚本之外的可执行文件,您也可以全局安装它,但请注意,您最终可能会使用该软件包的不同版本。
如果您只在全球范围内安装,那么其他人如果尝试运行您的测试会感到高兴(使用标准npm test
)
答案 4 :(得分:1)
6.x之后具有新npm版本的新方法,您无需再以global
模式安装mocha。
"scripts": { "test": "npx mocha" }
npx随新的npm安装一起自动安装。它将搜索
mocha
中的node_modules/.bin
或$ PATH