如何将本地模块指定为npm包依赖项

时间:2013-04-04 08:34:36

标签: node.js npm

我有一个应用程序,它对依赖项下的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": {}结构我希望从文件系统路径安装它的方法,但不知道如何。

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

7 个答案:

答案 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 linkhttps://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