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

有什么简单的方法吗?


当前回答

这两种方法(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/:

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

当node加载mymodule并且它确实需要('foo')时,node解析mymodule符号链接,然后只在/local/mymodule/node_modules/(及其祖先)中查找foo,但它没有找到。相反,我们希望node查找/local/myproject/node_modules/,因为这是我们运行项目的地方,也是安装foo的地方。

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

其他回答

由于由同一个人提问和回答,我将添加一个npm链接作为替代。

从文档:

这对于安装您自己的东西非常方便,这样您就可以使用它并迭代地测试它,而不必不断地重新构建。

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文件依赖)工作,如果本地模块有对等依赖,你只想安装在你的项目范围。

例如:

/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/:

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

当node加载mymodule并且它确实需要('foo')时,node解析mymodule符号链接,然后只在/local/mymodule/node_modules/(及其祖先)中查找foo,但它没有找到。相反,我们希望node查找/local/myproject/node_modules/,因为这是我们运行项目的地方,也是安装foo的地方。

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

对于npm的最新版本(我在macOS Big Sur下使用8.1.3),命令序列甚至更容易…

cd /path-where-your-local-project-is/
npm init

这将要求您提供一些与项目相关的数据,并正确初始化您的项目。json文件。

一旦完成,你可以安装额外的模块:

cd /path-where-your-local-project-is/
npm install --save-dev some-npm-module .

这就是你所需要的!

注意:我相信如果你在项目目录中,后面的点是不必要的,但我也认为添加它没有坏处:-)

(我想知道为什么官方文件仍然没有解释这一点…)

我遇到了不同的解决方案,而不是上面安装自定义构建包ckedor5。

所以我上传包到应用程序根目录,比:

npm add file:./ckeditor5

在我的包裹里。Json包被列为一个文件:

"ckeditor5-custom-build": "file:ckeditor5",

我认为这个答案可能与如何添加本地包的主题相关。

缺少主要属性?

正如前面的人回答的那样,npm i——save ../location-of-your-packages-根目录。 . ./location-of-your-packages-根目录,但是它必须有两个东西才能工作。

包中。Json指向的目录 包中的主要属性。Json必须设置和工作i.g.。"main": "src/index.js",如果../location-of-your-packages-根目录是../location-of- packages-根目录/src/index.js