Nodejs npm install 会安装全局已经安装好了的package吗?

发布于 1周前 作者 zlyuanteng 来自 nodejs/Nestjs

Nodejs npm install 会安装全局已经安装好了的package吗?

最近在搭Angularjs tutorials的环境。 package.json里定义了依赖。 发现karma,Bower,http-server,Protractor这几个包加起来都超过90M了。 3G网络伤不起丫。。。 我想问下,如果我 -g 安装这几个包之后,再在项目里npm install,npm还会下载这些包吗?

6 回复

Node.js NPM Install 会安装全局已经安装好的 Package 吗?

最近在搭建 AngularJS 教程的开发环境时,遇到了一些关于 NPM(Node Package Manager)安装包的问题。具体来说,我在 package.json 文件中定义了一些依赖项,比如 Karma、Bower、http-server 和 Protractor 等。

问题背景

这些依赖项加起来的大小超过了 90MB,这对于使用 3G 网络的开发者来说是一个不小的负担。因此,我考虑是否可以先将这些依赖项全局安装(使用 -g 选项),然后再在项目中运行 npm install,以避免重复下载这些包。

解答

答案是 不会。即使你已经全局安装了某些包,当你在项目中运行 npm install 时,NPM 仍然会检查 package.json 文件中的依赖项,并根据需要重新安装这些包到项目的本地 node_modules 目录中。

这是因为每个项目的依赖关系可能有所不同,全局安装的包版本可能与项目所需版本不匹配。为了确保项目的可移植性和一致性,NPM 默认会优先使用项目本地的依赖项。

示例代码

假设你已经在全局环境中安装了 Karma:

npm install -g karma

然后,在你的项目目录中,你有如下的 package.json 文件:

{
  "name": "my-angular-project",
  "version": "1.0.0",
  "dependencies": {
    "karma": "^5.2.0",
    "bower": "^1.8.8",
    "http-server": "^0.12.1",
    "protractor": "^7.0.0"
  }
}

接下来,你可以运行:

cd my-angular-project
npm install

即使你之前已经全局安装了 karmanpm install 仍然会在你的项目中安装 karma 的特定版本(例如 ^5.2.0)到 node_modules 目录中。

总结

尽管你可以在全局环境中安装某些包,但为了确保项目的稳定性和一致性,最好还是让 npm install 命令来管理项目的依赖项。这样可以避免因版本不一致导致的潜在问题。


这个你试试不就知道啦?我猜测应该是会的!

全局安装一般是为命令行使用的,貌似项目中还不能使用,需要在项目中单独安装

看版本, 你 install -g (不 -g 也一样) 会在 cache 文件夹里面缓存一份, 如果版本一致就不需要重新download了.

当你使用 npm install 命令时,默认情况下它只会安装 package.json 文件中列出的依赖包。如果某些依赖包已经在全局安装(通过 -g 选项),那么在项目中运行 npm install 时,npm 不会重复安装这些全局已有的包。npm 会在本地项目目录下的 node_modules 目录中安装所有必要的依赖。

示例

假设你的 package.json 文件包含以下依赖:

{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "karma": "^6.3.4",
    "bower": "^1.8.8",
    "http-server": "^0.12.1",
    "protractor": "^7.2.0"
  }
}

情况一:全局未安装这些依赖

如果你没有全局安装上述任何依赖,直接运行 npm install

npm install

npm 会自动安装这些依赖到项目的 node_modules 目录中。

情况二:全局已安装这些依赖

如果你已经全局安装了这些依赖,例如:

npm install -g karma bower http-server protractor

然后在项目中运行 npm install,npm 仍然会在项目的 node_modules 目录中安装这些依赖,以确保它们与项目的需求完全匹配。

解释

尽管全局安装了这些依赖,但为了确保项目的可移植性和一致性,npm 通常会在项目目录中重新安装这些依赖。这样可以避免因为全局安装的版本不一致而导致的问题。

希望这能帮助你理解在项目中使用 npm install 时 npm 的行为。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!