Node.js npm安装时不先检查全局版本吗?

Node.js npm安装时不先检查全局版本吗?,node.js,npm,npm-install,Node.js,Npm,Npm Install,我只是设置了一个测试,并尝试npm安装express,即使express已经在我的系统中全局存在。令我惊讶的是,它没有使用全局版本,而是在本地重新安装了一个版本!?它不是应该使用全局版本吗。。。或者我每次都应该使用-g,即使我只想使用现有的全局版本。否则,在本地安装任何东西有什么意义 如果您正在安装要在程序中使用的东西,请使用require'which',然后在项目的根目录下本地安装它。 如果要在shell、命令行或其他地方安装要使用的内容,请全局安装,以便其二进制文件最终位于PATH环境变量中

我只是设置了一个测试,并尝试npm安装express,即使express已经在我的系统中全局存在。令我惊讶的是,它没有使用全局版本,而是在本地重新安装了一个版本!?它不是应该使用全局版本吗。。。或者我每次都应该使用-g,即使我只想使用现有的全局版本。否则,在本地安装任何东西有什么意义

如果您正在安装要在程序中使用的东西,请使用require'which',然后在项目的根目录下本地安装它。 如果要在shell、命令行或其他地方安装要使用的内容,请全局安装,以便其二进制文件最终位于PATH环境变量中。 在我看来,第一种选择是最好的。简单、清晰、明确。如果您打算在一系列不同的项目中重复使用同一个库,那么第二种方法非常方便

本地安装-

npm install moduleName
本地安装并保存在package.json中-

npm install moduleName --save
全局安装-

npm install moduleName -g
如果您正在安装要在程序中使用的东西,请使用require'which',然后在项目的根目录下本地安装它。 如果要在shell、命令行或其他地方安装要使用的内容,请全局安装,以便其二进制文件最终位于PATH环境变量中。 在我看来,第一种选择是最好的。简单、清晰、明确。如果您打算在一系列不同的项目中重复使用同一个库,那么第二种方法非常方便

本地安装-

npm install moduleName
本地安装并保存在package.json中-

npm install moduleName --save
全局安装-

npm install moduleName -g

答案是否定的。它不应该使用您的全局版本

如果要使用全局版本,则根本不需要执行npm安装,因为它已经安装

如果你这样做了,很明显,你是说我想在本地将它安装到我的项目中。除此之外,我还想安装它的最新版本,除非它在我的package.json中声明为其他明确指定的版本

事实上,实际的问题是:你到底为什么不想在本地安装项目的依赖项?是否存在更多版本不匹配问题

正如@anshuman_singh所说,最佳实践是始终执行npm安装-保存

当然,您可以使用全局安装的软件包。它可以方便地快速测试代码,您将在几个小时后删除这些代码

但是,无论如何:如果您没有真正的硬盘或网络带宽问题,那么在本地安装所有依赖项将避免您将来遇到太多麻烦

另一方面,将模块上载到代码存储库也是一个坏主意,这可能是您试图避免的,因为对于不同版本的节点,如果不重新构建,大多数本机模块将无法工作。但大多数VCS支持忽略不能上传的文件和/或目录

例如,在git.gitignore文件中:

**/node_modules
总之:

npm init,如果您还没有使用它。 npm安装-保存所有项目依赖项。 npm安装-为生产测试中不需要的依赖项保存开发。 不要将节点_模块上载到VCS。 新签出后:npm安装或npm安装-生产不安装开发依赖项。 npm安装-g仅适用于您将在控制台中使用的工具。 这样,您就可以确保在生产环境或其他开发环境中,每个包的版本都完全相同

最后,如果您想将某些软件包升级到其最新版本,只需运行:

npm install --save <pagkage_name>@latest.

答案是否定的。它不应该使用您的全局版本

如果要使用全局版本,则根本不需要执行npm安装,因为它已经安装

如果你这样做了,很明显,你是说我想在本地将它安装到我的项目中。除此之外,我还想安装它的最新版本,除非它在我的package.json中声明为其他明确指定的版本

事实上,实际的问题是:你到底为什么不想在本地安装项目的依赖项?是否存在更多版本不匹配问题

正如@anshuman_singh所说,最佳实践是始终执行npm安装-保存

当然,您可以使用全局安装的软件包。它可以方便地快速测试代码,您将在几个小时后删除这些代码

但是,无论如何:如果您没有真正的硬盘或网络带宽问题,那么在本地安装所有依赖项将避免您将来遇到太多麻烦

另一方面,将模块上载到代码存储库也是一个坏主意,这可能是您试图避免的,因为对于不同版本的节点,如果不重新构建,大多数本机模块将无法工作。但大多数VCS支持忽略不能上传的文件和/或目录

例如 e、 在git.gitignore文件中:

**/node_modules
总之:

npm init,如果您还没有使用它。 npm安装-保存所有项目依赖项。 npm安装-为生产测试中不需要的依赖项保存开发。 不要将节点_模块上载到VCS。 新签出后:npm安装或npm安装-生产不安装开发依赖项。 npm安装-g仅适用于您将在控制台中使用的工具。 这样,您就可以确保在生产环境或其他开发环境中,每个包的版本都完全相同

最后,如果您想将某些软件包升级到其最新版本,只需运行:

npm install --save <pagkage_name>@latest.


我会问相反的问题:在全球范围内安装任何东西有什么意义?本地安装的要点是,您可以为每个项目安装单独的软件包集。这有助于避免忘记添加所需的软件包,并确保其他人也安装了该软件包,尤其是您的构建服务器。。。你最终不得不一次又一次地重复安装许多模块。最好安装一次,然后多次使用。我不明白为什么这个问题会被扣分。。。这是一个真实的问题,我真诚地想知道答案。这是不是太过分了?全球和本地安装都是为了服务不同的用例。发件人:•如果需要,请在本地安装。•如果要在命令行上运行,请全局安装它。•如果两个都需要,那么在两个地方都安装,[..]@感恩更好如何?因为它节省了磁盘空间?另一方面,在全球范围内安装它的成本是为自己创造工作。这样,您在管理每个项目的依赖关系时会犯更多的错误,并且将不得不花费时间来修复它。你也会因为这些错误而惹恼项目中的其他人。你很快就会发现,软件在很大程度上是一个权衡的游戏;绝大多数开发人员已经得出结论,在全球范围内安装软件包所带来的麻烦根本不值得它带来任何好处。我想问一个相反的问题:在全球范围内安装软件包有什么意义?本地安装的要点是,您可以为每个项目安装单独的软件包集。这有助于避免忘记添加所需的软件包,并确保其他人也安装了该软件包,尤其是您的构建服务器。。。你最终不得不一次又一次地重复安装许多模块。最好安装一次,然后多次使用。我不明白为什么这个问题会被扣分。。。这是一个真实的问题,我真诚地想知道答案。这是不是太过分了?全球和本地安装都是为了服务不同的用例。发件人:•如果需要,请在本地安装。•如果要在命令行上运行,请全局安装它。•如果两个都需要,那么在两个地方都安装,[..]@感恩更好如何?因为它节省了磁盘空间?另一方面,在全球范围内安装它的成本是为自己创造工作。这样,您在管理每个项目的依赖关系时会犯更多的错误,并且将不得不花费时间来修复它。你也会因为这些错误而惹恼项目中的其他人。你很快就会发现,软件在很大程度上是一个权衡的游戏;绝大多数开发人员已经得出结论,全球安装软件包所带来的麻烦根本不值得它带来任何好处。谢谢你。但我想,我真的在问为什么在本地安装之前,它没有查看我的全局npm模块。然而,我已经有了更好的理解。再次感谢,谢谢你。但我想,我真的在问为什么在本地安装之前,它没有查看我的全局npm模块。然而,我已经有了更好的理解。再次感谢。谢谢你的评论。还要注意刚才添加“npm init”的编辑注意:如果还没有packate.json文件,就应该这样做。没有这个文件-保存-保存开发,等等。。。无法存储您的软件包列表和版本。再次感谢。另外,我想你指的是package.json,而不是packate.json。不用担心。我现在有了更好的理解,谢谢你们。谢谢你们的评论。还要注意刚才添加“npm init”的编辑注意:如果还没有packate.json文件,就应该这样做。没有这个文件-保存-保存开发,等等。。。无法存储您的软件包列表和版本。再次感谢。另外,我想你指的是package.json,而不是packate.json。不用担心。多亏了你们,我现在明白多了。