乐趣区

npm管理依赖

semver
npm 依赖管理的一个重要特性是采用了语义化版本 (semver) 规范,作为依赖版本管理方案。
版本号
semver 约定一个包的版本号必须包含 3 个数字,格式必须为 MAJOR.MINOR.PATCH, 意为 主版本号. 小版本号. 修订版本号.
MAJOR 主版本号,对应大的版本号迭代,做了不兼容旧版的修改时要更新 MAJOR 版本号
MINOR 次版本号,对应小版本迭代,发生兼容旧版 API 的修改或功能更新时,更新 MINOR 版本号
PATCH 修订号,对应修订版本号,一般针对修复 BUG 的版本号
例如:
0.y.z 表示开发阶段,一切可能随时改变,非稳定版。
1.0.0 界定此版本为初始稳定版,后面的一切更新都基于此版本进行修改
在常规仅包含数字的版本号之外,semver 还允许在 MAJOR.MINOR.PATCH 后追加 – 后跟点号分隔的标签,作为预发布版本标签 – Prerelese Tags,通常被视为不稳定、不建议生产使用的版本。例如:

1.0.0-alpha
1.0.0-beta.1

版本限定
在进行包管理时, 为了保证安装依赖的兼容性,必须对依赖包版本进行限定.
版本限定的语法简述为为 [范围描述]< 版本号描述 >。1. 范围描述范围描述可选,必须配和版本描述确定范围,无法独立存在。
< 小于某一版本号
<= 小于等于某一版本号
> 大于某一版本号
>= 大于等于某一版本号
= 等于某一版本号,没有意义和直接写该版本号一样
– 某个范围,语法为 < 版本描述 >-< 版本描述 >
例如:
1.2.3-2 支持 >=1.2.3 <3.0.0 的版本
1.x.1 支持 >=1.0.1 <1.1.0 的版本
1 表示 >=1.0.0 <2.0.0 其余任意位置为空相似
1.0 >= 1.0.0 < 1.1.0
~,^
~,^ 的表述需要结合具体的包管理工具和版本号规则来确定,但是对于一般使用记住如下原则:
^ 是确保版本兼容性时,默认对次版本号的限定约束
~ 是确保版本兼容性时,默认对补丁号的约束
例如:
~1.1.1 >=1.1.1 <1.2.0
~1.1 >=1.1.0 <1.2.0
~1 >=1.0.0 <2.0.0
^1.1.1 >=1.1.1 <2.0.0
^0.1.1 >=0.1.1 <0.2.0
^0.0.1 >=0.0.1 <0.0.2
2. 版本号描述
* 通配符,类似 glob 模式 *
x,X 约等于 * 号,通常用于次版本和补丁的通配
例如:
* 支持 >= 0.0.0 的版本
x 支持 >= 0.0.0 的版本
包安装
npm install
npm install/i <Module Name> // 安装某个包
详细
npm i // 当存在 package.json 时,使用命令可全部安装包
npm i <module name>@1.0.0 // 安装指定版本的模块
npm i <module name>@latest // 安装最新版本
npm i <module name@”>=0.1.0 <0.2.0″
npm i <git url>

-S, –save 安装包信息将加入到 dependencies(生产阶段的依赖)
-D, –save-dev 安装包信息将加入到 devDependencies(开发阶段的依赖),所以开发阶段一般使用它
-O, –save-optional 安装包信息将加入到 optionalDependencies(可选阶段的依赖)
-E, –save-exact 精确安装指定模块版本

全局安装与本地安装
npm install/i <Module Name> // 本地安装
npm install/i <Module Name> –global/-g // 全局安装
全局安装
区别
1. 安装位置
npm root -g // 查看全局 node_modules 路径
npm root // 查看本地 node_modules 路径
全局安装:一般在 Users 用户名 AppDataRoaming 目录下。本地安装:一般安装在指定项目的 node_modules 文件夹下。
2. 调用方式全局安装:用户可以在命令行中直接运行该包支持的命令。本地安装:需在项目中引用。
包维护
增加
删除
npm uninstall <Module Name> // 卸载模块
npm remove <Module Name> // 移除模块
升级
npm update
npm update <package> -g // 升级全局安装的指定模块
npm update <package> // 升级当前目录下的指定模块
npm update –save-dev // 升级当前目录下全部模块
降级
npm outdated
npm outdated [[<@scope>/]<pkg> …]

退出移动版