- 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下载?
2条答案
按热度按时间hjqgdpho1#
node_modules文件夹的作用是什么?
您可以将 node_modules 文件夹视为项目所依赖的外部模块的缓存。当您
npm install
它们时,它们从Web下载并复制到 node_modules 文件夹中,Node.js经过训练,在导入它们时在那里查找它们我将其称为缓存,因为只要重新安装所有依赖的模块,就可以随时从头开始完全重新创建 node_modules 文件夹(应在项目文件夹中列出)。但我知道当我们要上传到github时,我们必须忽略node_modules文件夹,因为它占用了很多空间。
这是因为没有理由将所有依赖模块的副本存储在您自己的GitHub项目中。您使用的确切版本是已知的,并存储在您的
package.json
或package-lock.json
中,因此您或任何其他使用您项目的人都可以随时下载您的代码,然后从原始源代码中获取所有其他依赖模块(甚至包括您正在使用的完全相同的版本)。因此,没有任何理由在您自己的项目中存储所有这些依赖模块的单独副本。这将是浪费的,并且会使升级到所有这些依赖模块的较新版本变得复杂。所以这就是我的问题,如果我想托管我的项目,我真的需要上传node_modules吗?
如果您的项目在本地计算机上运行,现在想将其移到托管位置,最好在宿主机上重新安装所有依赖模块,而不是从开发机器上复制它们。这是因为在宿主机上安装它们的过程(可能是与您的开发机器不同的平台或操作系统)可能会针对特定的托管环境使用一些不同的安装过程。
bwntbbo32#
What exactly is the node_modules folder and what is it for?
它只是一个由
npm
创建的目录和一种通过package.json
跟踪您在本地安装的每个软件包的方法。如果您尝试删除node_module文件夹并运行应用程序,您将获得Error:Cannot find module 'some-module/methods'
。这基本上意味着您的机器将抱怨您正在使用某些模块,但机器无法定位它。就个人而言,我不建议直接编辑
node_modules
文件夹,如果你要探索它的功能。理想情况下,你应该在将其推回你的仓库之前,对仓库进行编辑,编译和执行。通常编辑node_modules
会覆盖使用npm install
时的所有更改,因此,没有人能够克隆你的repo,因为你不能将node_modules
添加到github。……
假设我想将我的应用程序/网站部署到某个服务器/主机上,我是否也必须将node_modules文件夹上传到服务器上?
强烈建议您避免手动将
node_modules
文件夹上传到服务器。这样做会杀死您的版本依赖性。重申我的观点,node_modules
只是一个由npm install
轻松创建的外部目录。如果您要将应用部署到另一个服务器,node_modules
可以很容易地单独安装。因此,将除node_modules
文件夹外的所有文件移动到服务器,并在执行应用程序之前运行npm install
。