npm脚本需要确切的文件名

通常,当将节点指向一个文件夹时,如果在那里有一个index.js文件,我们不需要指定它。

我安装了一个我正在使用的NPM依赖项, npm install --save-dev suman

suman在其npm项目的根目录中有一个index.js文件

在我的NPM脚本中, 依赖于suman的项目,我有这个

 "scripts": { "test": "node node_modules/suman/index.js --rnr test" } 

以上作品!

但是这不起作用:

 "scripts": { "test": "node node_modules/suman --rnr test" } 

有人有什么想法,为什么?

也许答案是显而易见的 – 在节点的需求function是能够这样的行为,但节点本身不是…

谢谢

由于库在package.json有一个bin ,所以你不需要明确地提供它的path。 只需运行node suman --rnr testnpm将负责使用正确的文件。

在节点项目中使用二进制文件安装依赖项时,npm会在./node_modules/.bin文件中创build符号链接,并在运行npm脚本时使用这些符号链接。

您需要添加正确的path:

 "scripts": { "test": "node ./node_modules/suman --rnr test" } 

注意./

更新:

多想了一会儿,可能不是那么容易的。 但看看这个链接: https ://docs.npmjs.com/misc/scripts – @elssar似乎是在正确的轨道上。

对不起,我不能将我的想法仅仅作为一个评论,而不是作为一个答案,但我还没有足够的声誉点评论。 但是,也许以下是相关的:

如果在你的问题中, node命令find适当的index.js ,就像在模块的节点文档中所显示的一样,那么logging的查找例程会find一个不同的index.js然后find(我认为) 你要。 具体来说,在尝试node_modules/suman/index.js (这是你想要的)之前,节点将查看node_modules/suman/package.json"main"字段node_modules/suman/package.json存在。 在suman中,它会引用lib/index.js (即node_modules/suman/lib/index.js ),它与所需的不同。 这是相关的吗?

更新 :只是为了澄清我的答案更通用的语言…

你原来的问题是有效的,因为如果没有其他复杂的情况,如果dir/index.js存在,那么下面的两个

  • node dir/index.js ...
  • node dir ...

应该引用相同的(默认)文件,即dir/index.js 。 因此,当这两个命令给出不同的结果时,这是合理的。 解释是有一个复杂的: dir/package.json文件有效地redirectnode dir ...使用非默认文件。 这是因为"main"属性是指dir/some/other/file.js 优先规则指定,如果仅使用目录名称,则在默认情况下使用此其他文件。 因此,你被迫继续使用你的问题中更长,更明确的“工作”命令。