通常在将节点指向文件夹时,如果有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"
}
任何人都知道为什么?
也许答案很明显 - 节点中的require函数能够实现这种行为,但节点本身不是......
感谢
答案 0 :(得分:1)
由于库Class cls = object.getClass();
Method getLabel = cls.getMethod("getLabel", null);
String label = (String)getLabel.invoke(object, null);
中有bin
,因此您无需明确提供其路径。只需运行package.json
,node suman --rnr test
即可使用正确的文件。
在节点项目中使用二进制文件安装依赖项时,npm会在npm
中为该文件创建一个符号链接,并在运行npm脚本时使用这些符号链接。
答案 1 :(得分:1)
您需要添加正确的路径:
"scripts": {
"test": "node ./node_modules/suman --rnr test"
}
注意./
在考虑了这一点之后,可能并不容易。但请看一下这个链接:https://docs.npmjs.com/misc/scripts - @elssar似乎走在了正确的轨道上。
答案 2 :(得分:1)
很抱歉,我不能将我的想法仅仅作为评论而不是答案,但我还没有足够的声誉来评论。但是,可能以下内容是相关的:
如果在您的问题中,node
命令以与显示in the node documentation for modules相同的方式找到相应的index.js
,那么记录的查找例程将找到不同的{{1}在找到(我认为)你想要的那个之前。具体来说,在尝试index.js
(您想要的那个)之前,节点会查看node_modules/suman/index.js
中的"main"
字段是否存在。在suman中,它确实如此,它引用了node_modules/suman/package.json
(即lib/index.js
),它与你想要的不同。这有关系吗?
更新:只是用更通用的语言澄清我的答案......
您的原始问题是有效的,因为如果没有任何其他并发症,如果node_modules/suman/lib/index.js
存在,那么以下两个
dir/index.js
node dir/index.js ...
应引用相同的(默认)文件,即node dir ...
。因此,当这两个命令给出不同的结果时,混淆是合理的。解释是存在一个复杂问题:dir/index.js
文件有效地重定向dir/package.json
以使用非默认文件。这是因为node dir ...
属性引用"main"
。优先规则指定,如果仅使用目录名,则在默认值之前将使用此其他文件。因此,你被迫继续使用更长,更明确的工作"从你的问题中得到命令。