node_moudules文件夹
一般来讲,上传项目文件的时候,因为node_moudules文件夹太大,影响项目大小,都会去除node_moudules文件夹再上传。
传输时删除node_moudules文件夹
- 文件夹以及文件过多过碎,当我们将项目整体拷贝给别人的时候,传输速度会很慢。
- 复杂的模块以濑关系需要被记录,确保模块的版本和当前使用的版本是一致的,否则会导致当前项目运行报错
为什么?
- 在传输项目的过程中,不需要传输node_moudules文件夹,因为npm会为我们提供项目描述文件:package.json文件
- package.json文件会记录当前项目依赖了哪些第三方模块,当别人拿到项目后,会根据package.json文件中所记录的依赖项,去下载第三方模块
package.json文件
项目描述文件,记录当前项目信息,如项目名称、版本号、作者、github地址、当前项目依赖了哪些第三方模块等。
使用 npm init -y
命令生成
自选生成
npm init
快速生成默认值
npm init -y
{
"name": "description", //项目名称
"version": "1.0.0", //项目版本
"description": "", //项目描述
"main": "index.js", //项目主入口文件
"scripts": { //给命令起个别名
"test": "echo \"Error: no test specified\" && exit 1",
//使用 npm run build 执行app.js文件
"build": "nodemon app.js"
},
"keywords": [], //关键字 用关键字形式描述当前shell
"author": "", //项目作者
"license": "ISC", //项目遵循的协议 ISC开放源代码
//下载的2个模块 npm install formidable mine
//dependencies项目依赖
"dependencies": {
"formidable": "^1.2.1",
"mime": "^2.3.1"
},
//devDependencies开发依赖
"devDependencies": {
"gulp": "^3.9.1"
}
}
在传输后没有node_moudules文件夹后,只需在package.json文件的目录下,运行npm install
即可
- 项目依赖 dependencies
- 在项目的开发阶段和线上运营阶段,都需要依赖的第三方包,称为项目依赖
- 使用npm install 包名命令下载的文件会默认被添加到 package.json 文件的 dependencies 字段中
"dependencies": {
"jquery": "^3.3.1"
}
- 开发依赖 devDependencies
- 在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方包,称为开发依赖
- 使用 npm install 包名 --save-dev 命令将包添加到package.json文件的devDependencies字段中
"devDependencies": {
"gulp": "^3.9.1"
}
- 区分项目依赖dependencies和开发依赖devDependencies的好处:
- 在不同的环境下,下载不同的依赖
- 当前是在线下的开发环境,使用
npm install
下载全部依赖 - 当前是在线上的开发环境,即处于服务器环境下,只需要使用
npm install --production
,生成的node_modules文件夹中只有项目依赖的内容
package-lock.json文件
在下载第三方模块的时候,npm会同时产生package-lock.json文件,这个文件会详细记录模块与模块间的依赖关系,模块版本,模块下载地址等
- 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题(防止自动下载最新版本导致项目运行失败)
- 加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作
Node.js中模块的加载机制
- 模块查找规则-当模块拥有路径但没后缀
require(./find.js);
require(./find);
- require方法根据模块路径查找模块,如果是完整路径,直接引入模块。
- 如果模块后缀省略,先找同名JS文件再找同名JS文件夹
- 如果找到了同名文件夹,找文件夹中的index.js
- 如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找main选项中的入口文件
- 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到
- 模块查找规则-当模块没有路径且没有后缀时
require('find');
- Node.js会假设它是系统模块
- Node.js会去node_modules文件夹中
- 首先看是否有该名字的JS文件
- 再看是否有该名字的文件夹
- 如果是文件夹看里面是否有index.js
- 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件
- 否则找不到报错