configuration节点npm package.json,以便“npm test”在unix和windows上都能工作

我开发了一个node.js npm模块,在Windows下开发。 今天我写了一些摩卡testing。 经过许多的努力,似乎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版本。

我发现了一个两岁的线程,有人要求这个function。 那个线程似乎消失了。 这个问题似乎很接近,但这不完全是我想要的,坦率地说,我不明白答案。 :(谁能澄清?

就目前而言,我正在走

 "scripts": { "test": "node node_modules/mocha/bin/mocha", "testOnUnixUseThis" : "./node_modules/.bin/mocha (I think)", "testOnWindowsUseThis" : "node node_modules/mocha/bin/mocha" }, 

不幸的是,你不能去npm test testOnWindowsUseThisnpm testOnWindowsUseThis 。 而且它不能解决Travis-CI问题。 但至less有一个下载模块的人可以(希望)看到发生了什么事情。

任何更好的想法? 我是唯一还在Windows下开发的人吗? 🙂

Solutions Collecting From Web of "configuration节点npm package.json,以便“npm test”在unix和windows上都能工作"

我一直能够npm install -g mocha npm install mocha npm install -g mochanpm install mocha ,然后添加

 "scripts": { "test": "mocha spec" } 

到package.json。 这可能会或可能不适用于每个环境。 我知道,例如,与线人,你必须使用斌/摩卡。 另外,如果你找不到解决办法,可以把你的测试脚本设置为Unix,然后添加第二个叫做“wintest”的脚本,或者在Windows中做任何你需要的脚本。 你可以任意命名你的脚本。 默认的(test,start等)可以和npm [command] ; 任何非标准的(比如wintest)都可以和npm run-script [command] ,它们仍然可以工作。

一个关于如何/为什么这个工作的小故事:

当你在全局安装一个模块时,它可以在PATH上(或者任何类似的窗口)使用。 在安装项目依赖项时,如果该模块具有任何二进制文件,那么这些文件node_modules/.bin链接到node_modules/.bin并且在运行npm run [some-command] ,npm有助于将node_modules/.bin添加到该命令的 PATH。 所以当摩卡全球安装"test": "mocha spec"使用您的全球安装摩卡运行测试。 当它是一个项目依赖项时,它使用node_modules/.bin的一个。 我发现的一个问题是,npm将node_modules/.bin添加到PATH的前面 ,所以本地二进制文件总是优先于全局文件。 几乎所有的时间 ,这都是你想要的,但值得知道的是,它是如何工作的(我最近有一个相关的错误)。

编辑:

不知道npm历史中的哪一点改变了,但npm run <script-name>现在可以工作(不需要再执行npm run-script <script-name>了)。 可能的run-script仍然有效。 我期望它,但我没有尝试过。

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

如果你

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

…这是一个工作的解决方案

 "scripts": { "test": "node node_modules/mocha/bin/mocha.js" }, 

备注

  • node放在前面不应该伤害,并且可以在Windows上帮助。(.js扩展名不一定要注册到nodejus可执行文件,除非你这样设置。可以打开一个文本编辑器,一个IDE或者更糟糕的脚本主机,Internet Explorer …)
  • 直接放置脚本可以避免需要全局安装。 (不要判断这是否是一个好的做法)
  • 正斜杠帮助在linux下运行(显然)。 并避免一个窗口的陷阱:反斜杠如果使用,将需要翻倍(因为他们被解释为逃脱下面的信,如果单独使用)。

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

 "scripts": { "test": "node_modules/.bin/mocha -w" }, 

使用npm i mocha --save-dev

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

如果你只在全球安装它,如果他们尝试运行你的测试(使用标准的npm test ),其他人将不会高兴,