配置节点npm package.json,以便"npm test"适用于unix和windows

use*_*300 29 unix windows node.js npm

我开发了一个node.js npm模块,在Windows下开发.今天我写了一些Mocha测试.经过多次挣扎,似乎npm test为了工作,package.json不得不看起来像这样:(可能有其他选择???)

"scripts": { "test": "node node_modules/mocha/bin/mocha" }
Run Code Online (Sandbox Code Playgroud)

而不是所有基于Unix的书中的内容,

"scripts": { "test": "./node_modules/.bin/mocha" }
Run Code Online (Sandbox Code Playgroud)

如何将package.json设置为在Windows和Unix上运行?我假设Travis-CI运行Unix,所以,如果我将构建链接到那个,它将会破坏Windows版本.

我找到了一个两年前的帖子,有人要求提供一个功能.那个线程似乎消失了.这个问题似乎很接近,但这并不是我想要的,坦率地说,我无法理解答案.:-(任何人都可以澄清一下吗?

暂时,我要去

"scripts": {
      "test": "node node_modules/mocha/bin/mocha",
      "testOnUnixUseThis"    : "./node_modules/.bin/mocha (I think)",
      "testOnWindowsUseThis" : "node node_modules/mocha/bin/mocha"
  },
Run Code Online (Sandbox Code Playgroud)

不幸的是,你不能去npm test testOnWindowsUseThisnpm testOnWindowsUseThis.它并没有解决Travis-CI问题.但至少下载该模块的人可以(希望)看到发生了什么.

有更好的想法吗?我是唯一仍在Windows下开发的人吗??? :-)

tan*_*ols 36

我一直都能够,npm install -g mocha或者npm install mocha只是添加

"scripts": {
    "test": "mocha spec"
}
Run Code Online (Sandbox Code Playgroud)

to 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 .因此,当全局安装mocha时,使用全局安装的mocha来运行测试.当它是项目依赖项时,它使用的是.我发现这个问题是npm添加到PATH 的前面,所以本地二进制文件总是优先于全局二进制文件.几乎所有的时间,这都是你想要的,但值得知道它是如何工作的(我最近有一个与此相关的错误)."test": "mocha spec"node_modules/.binnode_modules/.bin

编辑:

不确定npm历史中的这一点发生了什么变化,但npm run <script-name>现在有效(不需要再做npm run-script <script-name>了).可能run-script仍然有效.我期待它,但我没有尝试过.

  • 这使得您的包测试套件依赖于本地机器设置,包括全局安装的mocha版本,是的,它很可能会工作,但不确定这是推荐的做法. (2认同)

Fra*_*cke 15

如何将package.json设置为在Windows和Unix上运行?

如果你

  • 使用Windows
  • 不喜欢-g全局安装

......这是一个有效的解决方案

"scripts": {
  "test": "node node_modules/mocha/bin/mocha.js"
},
Run Code Online (Sandbox Code Playgroud)

备注:

  • 放在node前面不应该伤害,并且可以在Windows上提供帮助(.js扩展名不一定注册到nodejus可执行文件,除非你这样设置.可以打开文本编辑器,IDE或(更糟糕的)Windows脚本主机,Internet Explorer ...)
  • 直接使用脚本可以避免需要全局安装.(不判断这是不是一个好习惯)
  • 正斜杠帮助在linux下运行(显然)并在windows下工作(在这种情况下.还避免了Windows陷阱:如果使用反斜杠,则需要加倍 - 因为如果单独使用它们被解释为转义后续字母).


igo*_*udi 10

不要使用全球解决方案,我建议你按照摩卡人的说法:

"scripts": {  
    "test": "node_modules/.bin/mocha -w"
 },
Run Code Online (Sandbox Code Playgroud)


1j0*_*j01 5

使用 npm i mocha --save-dev

这将把模块保存为开发依赖项,npm将自动设置要在scripts对象中使用的可执行文件.如果您想使用package.json中定义的脚本之外的可执行文件,您也可以全局安装它,但请注意,您最终可能会使用不同版本的软件包.

如果你只是全局安装它,其他人如果试图运行你的测试就会不高兴(使用标准npm test)