384

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

"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": {}结构我希望它从文件系统路径安装的方法,但不知道如何。

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

4

8 回答 8

591

npm install现在支持这个

npm install --save ../path/to/mymodule

为此,mymodule必须将其配置为具有自己的模块package.json。请参阅创建 NodeJS 模块

从 npm 2.0 开始,本机支持本地依赖项。请参阅danilopopeye 对类似问题的回答。我在这里复制了他的回答,因为这个问题在网络搜索结果中排名很高。

此功能在 npm 的 2.0.0 版本中实现。例如:

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

以下任何路径也是有效的:

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

同步更新

由于npm install <folder>将目录中的包作为符号链接添加到当前项目中,因此对本地包的任何更改都会自动同步。

于 2016-07-17T01:15:31.603 回答
53

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

看起来答案是npm linkhttps ://docs.npmjs.com/cli/link

于 2013-10-07T11:28:42.893 回答
15

最后我找不到一个简洁的方法,所以我去创建一个名为的目录local_modules,然后将此 bashscript 添加到 scripts->preinstall 中的 package.json

#!/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
于 2013-04-10T07:52:57.477 回答
6

在与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。希望它可以帮助某人。

于 2016-10-19T10:30:00.363 回答
2

你可以在你的项目中添加到你的 package.json 文件中

"package-name" : "path/to/package"

然后npm i在你的项目中运行

于 2021-08-05T13:52:33.477 回答
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 上并告诉您的父 package.json 从 git 安装依赖项:https ://npmjs.org/doc/json.html#Git-URLs-as-Dependencies

于 2013-04-05T16:50:45.563 回答
0

在工作中,我们有一个公共库,供几个不同的项目使用,它们都在一个存储库中。最初我们使用已发布的(私有)版本(npm install --save rp-utils),但这会导致我们在开发过程中进行大量不必要的版本更新。该库位于应用程序的姊妹目录中,我们可以使用相对路径而不是版本。而不是 package.json 中的 "rp-utils": "^1.3.34" 现在是:

{ 
  "dependencies": { ...
    "rp-utils": "../rp-utils",
   ...

rp-utils 目录包含一个可发布的 npm 包

于 2020-11-16T23:52:17.880 回答
0

使用本地安装

我遇到了来自本地依赖项的冲突反应安装问题。我通过使用local-installnpm 包解决了这个错误。这个包不创建符号链接,这解决了我的问题。

脚步:

  1. npm i -g local-install
  2. 在目标存储库中运行npx local-install --save <local-path>以安装本地依赖项

进一步阅读:https ://www.npmjs.com/package/install-local

我在尝试安装本地软件包时收到的错误npm install --save <local-directory>

错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能由于以下原因之一而发生:

  1. 你可能有不匹配的 React 版本和渲染器(例如 React DOM)
  2. 您可能违反了 Hooks 规则
  3. 你可能在同一个应用程序中拥有多个 React 副本
于 2021-12-16T07:55:59.710 回答