我有一个应用程序,它对依赖项下的package.json文件中指定的第三方模块(例如'express')具有通常的依赖关系。 E.g。
"express" : "3.1.1"
我想模块化地构建我自己的代码,并且有一组本地(意味着我目前在文件系统上)的模块由package.json安装。我知道我可以通过运行来安装本地模块:
npm install path/to/mymodule
但是,我不知道如何通过package.json依赖项结构实现这一点。在此命令中使用--save
选项只是将"mymodule": "0.0.0"
放入package.json(不引用文件路径位置)。如果我然后从node_modules中删除已安装的版本,并尝试从package.json重新安装,它将失败(因为它在中央注册表中查找“mymodule”,并且看起来不是本地的。)
我确信这是告诉"dependencies": {}
结构我希望从文件系统路径安装它的方法,但不知道如何。
其他人有这个问题吗? 感谢。
答案 0 :(得分:283)
从NPM 2.0.0开始,本机支持导入本地依赖项。这是documented by danilopopeye in response to a similar question。我在这里复制了他的回复,以帮助任何需要找到正确答案的人,因为这个问题在Google的搜索结果中排名很高。
此功能是在npm版本2.0.0中实现的。例如:
{ "name": "baz", "dependencies": { "bar": "file:../foo/bar" } }
以下任何路径也有效:
../foo/bar ~/foo/bar ./foo/bar /foo/bar
答案 1 :(得分:36)
请参阅:Local dependency in package.json
看起来答案是npm link
:https://docs.npmjs.com/cli/link
答案 2 :(得分:9)
我最终找不到一个简洁的方法,所以我去创建一个名为local_modules
的目录,然后将这个bashscript添加到脚本中的package.json-> preinstall
#!/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
答案 3 :(得分:2)
在使用npm link
命令(开发本地模块的建议解决方案而不将它们发布到注册表或在node_modules文件夹中维护单独的副本)中苦苦挣扎之后,我构建了一个小的npm模块来帮助解决这个问题。
此修复需要两个简单的步骤。
首先:
npm install lib-manager --save-dev
其次,将其添加到您的package.json
:
{
"name": "yourModuleName",
// ...
"scripts": {
"postinstall": "./node_modules/.bin/local-link"
}
}
https://www.npmjs.com/package/lib-manager的更多详情。希望它可以帮到某人。
答案 4 :(得分:1)
如果可以简单地将node_modules中预装的模块与其他文件一起发布,则可以这样做:
// ./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上并告诉您的父包.json从git安装依赖项:https://npmjs.org/doc/json.html#Git-URLs-as-Dependencies
答案 5 :(得分:0)
在工作中,我们有一个公共库,供单个库中的几个不同项目使用。最初,我们使用已发布的(私有)版本(npm install --save rp-utils),但是随着我们的开发,这导致了很多不必要的版本更新。该库位于应用程序的姊妹目录中,我们可以使用相对路径而不是版本。而不是package.json中的“ rp-utils”:“ ^ 1.3.34”,它现在是:
{
"dependencies": { ...
"rp-utils": "../rp-utils",
...
rp-utils目录包含一个可发布的npm软件包
答案 6 :(得分:0)
你可以在你的项目中添加你的 package.json 文件
"package-name" : "path/to/package"
然后在您的项目中运行 npm i