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 test
, npm
将负责使用正确的文件。
在节点项目中使用二进制文件安装依赖项时,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
优先规则指定,如果仅使用目录名称,则在默认情况下使用此其他文件。 因此,你被迫继续使用你的问题中更长,更明确的“工作”命令。