使用npm安装本地模块?

问题描述 投票:324回答:4

我有一个下载的模块仓库,我想在本地安装,而不是全局安装在另一个目录中?

有什么简单的方法可以做到这一点?

javascript node.js npm packages npm-install
4个回答
427
投票

来自npm-link documentation

在本地模块目录中:

$ cd ./package-dir
$ npm link

在要使用该模块的项目目录中:

$ cd ./project-dir
$ npm link package-name

或者一次性使用相对路径:

$ cd ./project-dir
$ npm link ../package-dir

这相当于使用上面的两个命令。


346
投票

你只需要向<folder>提供一个npm install参数,参数应指向本地文件夹而不是包名:

npm install /path

131
投票

由于同一个人的询问和回答,我将添加一个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"
  }

6
投票

如果本地模块具有您只想在项目范围内安装的对等依赖项,则这些方法(npm linkpackage.json文件依赖项)都不起作用。

例如:

/local/mymodule/package.json:
  "name": "mymodule",
  "peerDependencies":
  {
    "foo": "^2.5"
  }

/dev/myproject/package.json:
  "dependencies":
  {
    "mymodule": "file:/local/mymodule",
    "foo": "^2.5"
  }

在这种情况下,npm像这样设置myprojectnode_modules/

/dev/myproject/node_modules/
  foo/
  mymodule -> /local/mymodule

当节点加载mymodule并且它执行require('foo')时,node解析mymodule符号链接,然后只在/local/mymodule/node_modules/(及其祖先)中查找foo,它找不到它。相反,我们希望节点查看/local/myproject/node_modules/,因为那是运行我们的项目的地方,以及安装foo的地方。

因此,我们需要一种方法来告诉节点在查找foo时不解析此符号链接,或者我们需要一种方法告诉npm在mymodule中使用文件依赖语法时安装package.json的副本。不幸的是,我还没有办法做到这一点:(

© www.soinside.com 2019 - 2024. All rights reserved.