一、exports和module.exports
在node中,有两种导出方式。一种是exports。一种是module.exports。这两种都是为了导出node里面的函数。
1、exports
- exports实际指向module.exports。
- 修改的是变量。
- 通过exports只能使用 . 的方式来向外部暴露内部变量。
exports.xxx=xxx
2、module.exports
- 修改的是对象
- module.exports有两种暴露方式
(1)、. 的方式
module.exports.xxx= xxx
(2)、直接赋值
module.exports = {}
所以我们在实际使用的过程中,经常用exports.module的方式来导出
二、包
1、什么是包?
包实际上就是一个压缩文件,解压以后还原目录。
包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。
包规范由 包结构 和 包描述文件 两个部分组成。
-
(1)、包结构:用于组织包中的各种文件。
-
(2)、包描述文件:用于表达非代码相关的信息,以供外部读取分析。
它是一个JSON格式的文件 package.json,位于包的根目录下,是包的重要组成部分。
符合规范的目录,应该包括如下文件:
(1)、package.json: 描述文件。
项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块等。
使用npm init -y命令生成。
项目依赖
在项目的开发阶段和线上运营阶段,都需要依赖的第三方包,称之为项目依赖。
dependencies 依赖 当前包依赖的其他包
使用npm install 包名命令下载的文件会默认被添加到 package.json 文件的 dependencies 字段中。
"dependencies": {
"vuex": "^4.0.2"
}
开发依赖。
在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方包,称为开发依赖。
devDependencies 开发环境依赖
使用npm install 包名 --save-dev命令将包添加到package.json文件的devDependencies字段中。
"devDependencies": {
"electron-builder": "^22.14.5",
"postcss-px-to-viewport": "^1.1.1",
},
package-lock.json 文件的作用
锁定包的版本,确保再次下载时不会因为包版本不同而产生问题。
加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作
(2)、bin : 可执行二进制文件。
(3)、lib: js代码。
(4)、doc: 文档。
(功能性的说明文档)
(5)、test: 单元测试。
三、NPM(Node Package Manager)
包规范是理论,NPM是其中的一种实践。
对于node而言,NPM帮助其完成了第三方模块的发布,安装和依赖等。借助NPM,node与第三方模块之间形成了很好的一个生态系统。
1、常用命令
-
npm -v: 查看npm的版本
-
npm version : 查看所有模块的版本
-
npm : 帮助说明
-
npm search 包名 : 搜索模块包
-
npm install/i 包名 : 在当前目录安装包
-
npm install/i 包名 -g : 全局模式安装包 (全局安装的包一般都是一些工具)
-
npm remove/r 包名 : 删除一个模块
-
npm uninstall 包名 : 删除一个模块
-
npm update : 升级全部包
-
npm update 包名 : 升级指定包
-
npm install 包名 --save : 安装包并添加到依赖中 重要
-
npm install : 下载当前项目所依赖的包
-
npm install 文件路径 : 从本地安装
-
npm install 包名 --registry=地址 : 从镜像源安装
-
npm config set registry 地址 : 设置镜像源
-
npm install -g 就是npm install --global
-
npm install -D 就是npm install --save-dev
devDependencies 里面的包只用于开发环境,不用于生产环境
-
npm install -S 就是npm install --save
`dependencies 是需要发布到生产环境的
-
npm view 包名 versions: 查看所有版本 - ######npm view 包名 version: 查看最高版本
-
npm i 包名@版本: 安装指定版本的包
通过npm下载的包,直接通过包名引用(require)即可
const math=require('math')
2、全局安装和本地安装
(1)、全局安装:命令行工具。
(2)、本地安装:库文件
3、CNPM中国npm镜像的客户端
- npm install cnpm -g :安装cnpm(cnpm 是中国 npm 镜像的客户端)
- npm install cnpm -g -registry=https://registry.npm.taobao.org (国内安装)
node在使用模块名字来引入模块时,它首先会在当前目录的node_modules中寻找是否含有该模块。如果有则直接使用,如果没有去上级node_modules里去寻找,一直寻找到磁盘的根目录,没有则报错。