关于node.js:如何将本地模块指定为npm包依赖项

how to specify local modules as npm package dependencies

我有一个应用程序,它对依赖项下package.json文件中指定的第三方模块(例如"express")具有通常的依赖项集。例如。

1
"express"     :"3.1.1"

我想构建自己的代码模块,并让package.json安装一组本地(在我当前所在的文件系统中是指)模块。我知道可以通过运行以下命令安装本地模块:

1
npm install path/to/mymodule

但是,我不知道如何通过package.json依赖结构实现这一点。在这个命令中使用--save选项只需将"mymodule":"0.0.0"放入my package.json(不引用文件路径位置)。然后,如果我从node_模块中删除已安装的版本,并尝试从package.json重新安装,它将失败(因为它在中央注册表中查找"mymodule",而不是在本地查找)。

我相信这是告诉"dependencies": {}结构我希望从文件系统路径安装它,但不知道如何安装的一种方法。

其他人有这个问题吗?谢谢。


从NPM 2.0.0开始,本地支持导入本地依赖项。达尼洛波佩(Danilopeye)在回答一个类似问题时记录了这一点。我把他的回答复制到这里来帮助任何需要找到正确答案的人,因为这个问题在谷歌的搜索结果中排名很高。

This feature was implemented in the version 2.0.0 of npm. For example:

1
2
3
4
5
6
{
 "name":"baz",
 "dependencies": {
   "bar":"file:../foo/bar"
  }
}

Any of the following paths are also valid:

1
2
3
4
../foo/bar
~/foo/bar
./foo/bar
/foo/bar


请参见package.json中的本地依赖项

答案似乎是npm link:https://docs.npmjs.com/cli/link


最后我找不到一个好方法,于是我创建了一个名为local_modules的目录,然后在scripts->preinstall中将这个bashscript添加到package.json中。

1
2
3
4
5
6
7
8
#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
    packageJson="${i}/package.json"
    if [ -f"${packageJson}" ]; then
        echo"installing ${i}..."
        npm install"${i}"
    fi
done

在与npm link命令(在不将本地模块发布到注册表或在node_modules文件夹中维护单独副本的情况下开发本地模块的建议解决方案)进行了大量的斗争之后,我构建了一个小的NPM模块来帮助解决这个问题。

修复需要两个简单的步骤。

第一:

1
npm install lib-manager --save-dev

第二,把这个加到你的package.json中:

1
2
3
4
5
6
7
{  
 "name":"yourModuleName",  
  // ...
 "scripts": {
   "postinstall":"./node_modules/.bin/local-link"
  }
}

更多详情请访问https://www.npmjs.com/package/lib-manager。希望它能帮助别人。


如果可以简单地将预装在节点模块中的模块与其他文件一起发布,则可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// ./node_modules/foo/package.json
{
 "name":"foo",
 "version":"0.0.1",
 "main":"index.js"
}

// ./package.json
...
"dependencies": {
 "foo":"0.0.1",
 "bar":"*"
}

// ./app.js
var foo = require('foo');

您可能还希望将模块存储在git上,并告诉parent package.json从git安装依赖项:https://npmjs.org/doc/json.html_git urls作为依赖项