npm
# npm
Node.js
中第三方模块叫做包
包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率
包下载地址
# 基本使用
- 使用
npm
包管理工具,在项目中安装格式化时间的包 (moment) - 使用
require()
导入格式化时间的包 - 参考
moment
的官方API文档对时间进行格式化
安装包命令
npm install 包名称
简写
npm i 包名称
注意
初次装包完成后,多出 node_modules
和 pack-lock.json
node_modules
文件夹用来存放已安装到项目中的包package-lock.json
配置文件用来记录node_modules
目录下每一个包的下载信息,包名、版本号、下载地址等
# 安装指定版本的包
npm i xxx@版本号
///
npm i moment@2.24.0
2
3
# 语义化版本规范
第一个数字 : 大版本
第二个数字 : 功能版本
第三个数字 : Bug修复版本
# 包管理配置文件
npm
规定,在项目根目录中,必须提供一个叫 package.json
的包管理配置文件。用来记录与项目有关的一些配置文件信息
- 项目的名称、版本号、描述等
- 项目中都i用到了那些包
- 那些包只在开发期间会用到
- 那些包在开发和部署时都需要用到等
在项目根目录中,创建一个 叫 package.json
的配置文件,既可用来记录项目中安装了那些包,从而方便剔除 node_modules
目录之后,在团队成员之间共享项目 的源代码
解决 在 .gitignore
中添加 node_modules
文件忽略不传
# 创建 package.json
npm init -y
- 初始化的目录不能包含中文、空格等
- 安装包时会自动把包的名称和版本号记录到
package.json
文件中
导入的包会先访问package.json
包
# dependencies
安装的包节点记录
项目的运行依赖与 node_modules
文件夹 ,如果剔除后会报错
解决
npm install
会根据 package.json
文件中的 dependencies
中的包依赖一次性安装所i有包
# 卸载包
npm uninstall 包名称
可以将 node_modules
文件中的包删除以及 dependecies
的包依赖删除
# devDependencies
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到
devDependencies
节点中
npm i 包名 --save-dev
//简写
npm i 包名 -D
2
3
# 包分类
- 项目包
- 全局包
包基本结构规范
- 必须以单独的目录而存在
- 包的顶级目录下必须包含
package.json
这个包管理配置文件 package.json
必须包含 name 、 version、main 属性
# 项目包
安装到 node_modules
都是项目包
- 开发依赖包(被记录到
devDependencies
节点中的包,只在开发期间会用到) - 核心依赖包(被记录到
Dependencies
节点中的包,在开发期间和项目上线期间会用到)
# 全局包
在执行 npm install
命令时,如果提供了 -g 参数 ,则会安装为全局包
# 安装
npm i 包名 -g
# 卸载
npm uninstall 包名 -g
2
3
4
全局包的安装路径
C:\Users\用户名\AppData\Roaming\npm\node_modules
# 示例 i5ting_toc
# 安装
npm install -g i5ting_toc
# 功能 将 md 转换为 html 文件
i5ting_toc -f URL [-o] //用默认浏览器打开 -o
2
3
4
# 发布自己的包
创建三个基本文件
package.json
js
源文件- 说明文档
示例
发布包
- 在根目录下登录
npm
账号 npm publish
发布包
删除包
npm unpublish 包名 --force
- 只能删除72小时内的包
- 删除后不允许重复发布
# 模块加载机制
模块在第一次加载后会被缓存,require()
不会导致模块的代码被执行多次
无论是内置模块,用户自定义模块,还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率
const a = require('y.js');
const a = require('y.js');
const a = require('y.js');
//不会多次执行y.js里的代码
2
3
4
- 内置模块的加载优先级最高
例如:fs
文件模块是内置的,如果有一个名为fs
的第三方模块优先加载的fs
文件模块
- 自定义模块的加载机制
加载自定义模块时,必须指定以 ./
的路径标识符,如果没有路径标识符,则 node 会把它当作内置模块或第三方模块进行加载
同时,在 require()
导入自定义模块时,如果省略了文件的扩展名,则Node 会按顺序加载一下
- 确切的文件名
.js
扩展名.json
扩展名.node
sys32应用扩展名- 加载失败
- 第三方模块的加载机制
如果没有找到对应的第三方模块,则移动到上一次目录中,进行加载,知道系统盘的根目录
- C:\user\project\node_modules\yuadh
- C:\user\node_modules\yuadh
- C:\node_modules\yuadh
- 目录作为模块的加载机制
package.json
文件中的 main 入口属性- 加载目录下的
index.js
文件
# 解决下包慢问题
**扩展:**镜像(Mirroring) 是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像
# 查看当前的下包镜像源
npm config get registry
# 将下包的镜像源切换为淘宝镜像源
npm config set registry = https://registry.npm.taobao.org/
2
3
4
# nrm
包管理工具
npm -m nrm -g//-g表示设置为全局可用的工具
nrm ls
nrm use taobao
2
3