我有一个应用程序,它对第三方模块有通常的依赖集(例如。'express')。Json文件下的依赖。如。

"express"     : "3.1.1"

我想模块化地构造我自己的代码,并有一组本地(意思是我目前在的文件系统上)模块被package.json安装。我知道我可以通过运行以下命令来安装本地模块:

npm install path/to/mymodule

但是,我不知道如何通过包来实现这一点。Json依赖结构。在这个命令中使用——save选项只是简单地将"mymodule": "0.0.0"放入我的包中。Json(不引用文件路径位置)。如果我从node_modules中删除已安装的版本,并尝试从包中重新安装。Json,它会失败(因为它在中央注册表中寻找“mymodule”,而不是在本地寻找)。

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

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


当前回答

NPM安装现在支持这个功能

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>将包添加到当前项目的符号链接目录中,任何对本地包的更改都会自动同步。

其他回答

NPM安装现在支持这个功能

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>将包添加到当前项目的符号链接目录中,任何对本地包的更改都会自动同步。

使用安装本地

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

步骤:

执行NPM I -g install-local命令 在目标存储库中执行NPX install-local——save <local-path>命令安装本地依赖项

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

当我试图用npm install——save <local-directory>安装本地包时,我收到的错误:

错误:无效的钩子调用。钩子只能在函数组件的内部调用。这可能是由于以下原因之一: React和渲染器的版本可能不匹配(比如React DOM) 你可能违反了胡克斯的规矩 你可能在同一个应用程序中有多个React副本

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

看起来答案是npm链接:https://docs.npmjs.com/cli/link

在工作中,我们有一个公共库,在一个存储库中由几个不同的项目使用。最初我们使用的是已发布的(私有)版本(npm install—save rp-utils),但在开发过程中,这导致了许多不必要的版本更新。库位于应用程序的姐妹目录中,我们可以使用相对路径而不是版本。而不是“rp-utils”:“^1.3.34”在包。Json现在是:

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

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

我不能找到一个整洁的方法,所以我去创建一个名为local_modules的目录,然后将这个bashscript添加到包。脚本中的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