“node_modules”文件夹的用途是啥?

Posted

技术标签:

【中文标题】“node_modules”文件夹的用途是啥?【英文标题】:What is the purpose of the 'node_modules' folder?“node_modules”文件夹的用途是什么? 【发布时间】:2021-04-10 22:59:37 【问题描述】:

node_modules 文件夹究竟是什么,它的用途是什么?

我知道当我们使用npm 下载任何库时,该库会转到文件夹node_modules。我也知道,当我们要上传它(例如到 GitHub)时,我们必须忽略 node_modules 文件夹,因为它占用大量空间。通过文件package.json,我们可以使用npm i下载所有依赖。

假设我想将我的应用程序/网站部署到某个服务器/主机,我是否也必须将 node_modules 文件夹上传到服务器?

还有一件事。通常,我从网站下载我的jQuery 和Bootstrap 文件并将内容复制到我项目中的 css/js 文件夹中,但这次我尝试使用npm,一切顺利到文件夹 node_modules 我正在使用Cordova。当我执行命令cordova build时,我的jQuery和Bootstrap文件都没有生成。

所以这些是我的问题:

如果我想托管我的项目,我真的需要上传 node_modules 文件夹吗? 如果是 Cordova 或 Ionic,我是否也必须 将 node_modules 文件夹复制到 www 文件夹? 如果是这样,使用 npm 下载库有什么意义?真的是这样吗?哪一个更好?去网站,下载文件,然后在www里面粘贴,还是通过npm下载?

【问题讨论】:

【参考方案1】:

node_modules 文件夹的作用是什么?

您可以将 node_modules 文件夹视为项目所依赖的外部模块的缓存。当您 npm install 它们时,它们会从网络上下载并复制到 node_modules 文件夹中,并且 Node.js 会在您导入它们(没有特定路径)时被训练在那里寻找它们。我将其称为缓存,因为 node_modules 文件夹可以随时通过重新安装所有依赖模块(应在项目文件夹中列出)从头开始完全重新创建。

但我知道当我们要将它上传到 github 时,我们必须忽略 node_modules 文件夹,因为它占用大量空间。

这是因为没有理由将所有依赖模块的副本存储在您自己的 GitHub 项目中。您使用的确切版本是已知的并存储在您的 package.jsonpackage-lock.json 中,因此您或使用您项目的其他任何人都可以随时下载您的代码,然后从原始源中提取所有其他依赖模块(甚至包括与您使用的版本完全相同)。因此,没有任何理由将所有这些依赖模块的单独副本存储在您自己的项目中。这只会造成浪费,并且会使升级到所有这些依赖模块的新版本变得复杂。

这是我的问题,如果我想托管我的项目,我真的必须上传 node_modules 吗?

如果您的项目在本地计算机上运行,​​并且现在想要将其移动到您的托管位置,最好在托管计算机上重新安装所有依赖模块,并且不要从你的开发机器。这是因为在宿主机(可能与您的开发机器不同的平台或操作系统)上安装它们的过程可能会针对特定宿主环境使用一些不同的安装过程。

【讨论】:

我如何在主机服务器上重新安装它们?当你说在没有特定路径的情况下导入它们时,你的意思是使用 require,对吧? @izaacmendes - require()import 取决于您使用的是 ESM 模块还是 CommonJS 模块。如果您已正确准备 package.json 文件以包含您的依赖模块,那么您可以在 package.json 所在的目录中不使用其他参数来执行 npm install,npm 将获取所有依赖模块并将它们放入node_modules 目录。如果您还没有这样做,请参阅 NPM 的 --save-xxxx 选项,了解如何将依赖项保存到 package.json 文件中。 @izaacmendes - 如果这回答了您的问题,您可以通过单击答案左侧的复选标记向社区表明这一点。这也将为您在此处遵循正确的程序赢得一些声誉积分。 但是 require 仅适用于 js 文件,但是当我必须使用 ? 我做错了吗?因为我的 package.json 文件在我的 www 之外,这就是为什么当我运行 Cordova build 命令时,我的外部库都没有附带它。但这就是 Cordova 设置项目的方式,所以我应该将 package.json 移动到 www 文件夹吗?因为那时 node_modules 将在那里,我所有的问题都会消失,当我部署到 firebase 托管时,我也可以部署 node_modules 吗?

以上是关于“node_modules”文件夹的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

jenkins 用户文件夹的用途是啥,这些配置文件是啥?

App Store 配置文件的用途是啥?

site.webmanifest 文件的主要用途是啥?

Xcode 生成的 AppDelegate 和 ViewController 文件的用途是啥?

打字稿打字,打字文件夹是啥

Makefile 中 .PHONY 的用途是啥?