我有一个下载的模块仓库,我想在本地安装,而不是全局安装在另一个目录中?
有什么简单的方法可以做到这一点?
来自npm-link documentation:
在本地模块目录中:
$ cd ./package-dir $ npm link
在要使用该模块的项目目录中:
$ cd ./project-dir $ npm link package-name
或者一次性使用相对路径:
$ cd ./project-dir $ npm link ../package-dir
这相当于使用上面的两个命令 .
你只需要为npm install提供一个 <folder> 参数,参数应该是本地文件夹而不是包名:
<folder>
npm install /path
自从同一个人询问和回答后,我会添加npm link作为替代方案 .
来自docs:
这对于安装自己的东西非常方便,因此您可以对其进行处理并迭代测试,而无需不断重建 .
cd ~/projects/node-bloggy # go into the dir of your main project npm link ../node-redis # link the dir of your dependency
[编辑]从NPM 2.0开始,您可以在package.json中声明本地依赖项
"dependencies": { "bar": "file:../foo/bar" }
如果本地模块具有您只想在项目范围内安装的对等依赖项,则这些方法( npm link 或 package.json 文件依赖项)都不起作用 .
npm link
package.json
例如:
/local/mymodule/package.json: "name": "mymodule", "peerDependencies": { "foo": "^2.5" } /dev/myproject/package.json: "dependencies": { "mymodule": "file:/local/mymodule", "foo": "^2.5" }
在这种情况下,npm像这样设置 myproject 的 node_modules/ :
myproject
node_modules/
/dev/myproject/node_modules/ foo/ mymodule -> /local/mymodule
当节点加载 mymodule 并且它确实 require('foo') 时,节点会解析 mymodule 符号链接,然后只查找 /local/mymodule/node_modules/ (及其祖先)的 foo ,它找不到它 . 相反,我们希望节点查看 /local/myproject/node_modules/ ,因为那是从哪里运行我们的项目,以及安装 foo 的位置 .
mymodule
require('foo')
/local/mymodule/node_modules/
foo
/local/myproject/node_modules/
因此,我们需要一种方法来告诉节点在查找 foo 时不解析此符号链接,或者我们需要一种方法告诉npm在 package.json 中使用文件依赖性语法时安装 mymodule 的副本 . 不幸的是,我还没有办法做到这一点:(
4 回答
来自npm-link documentation:
在本地模块目录中:
在要使用该模块的项目目录中:
或者一次性使用相对路径:
这相当于使用上面的两个命令 .
你只需要为npm install提供一个
<folder>
参数,参数应该是本地文件夹而不是包名:自从同一个人询问和回答后,我会添加npm link作为替代方案 .
来自docs:
[编辑]从NPM 2.0开始,您可以在package.json中声明本地依赖项
如果本地模块具有您只想在项目范围内安装的对等依赖项,则这些方法(
npm link
或package.json
文件依赖项)都不起作用 .例如:
在这种情况下,npm像这样设置
myproject
的node_modules/
:当节点加载
mymodule
并且它确实require('foo')
时,节点会解析mymodule
符号链接,然后只查找/local/mymodule/node_modules/
(及其祖先)的foo
,它找不到它 . 相反,我们希望节点查看/local/myproject/node_modules/
,因为那是从哪里运行我们的项目,以及安装foo
的位置 .因此,我们需要一种方法来告诉节点在查找
foo
时不解析此符号链接,或者我们需要一种方法告诉npm在package.json
中使用文件依赖性语法时安装mymodule
的副本 . 不幸的是,我还没有办法做到这一点:(