npm脚本需要确切的文件名

时间:2016-02-12 06:36:08

标签: javascript node.js

通常在将节点指向文件夹时,如果有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函数能够实现这种行为,但节点本身不是......

感谢

3 个答案:

答案 0 :(得分:1)

由于库Class cls = object.getClass(); Method getLabel = cls.getMethod("getLabel", null); String label = (String)getLabel.invoke(object, null); 中有bin,因此您无需明确提供其路径。只需运行package.jsonnode 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"。优先规则指定,如果仅使用目录名,则在默认值之前将使用此其他文件。因此,你被迫继续使用更长,更明确的工作"从你的问题中得到命令。