博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
npm管理依赖
阅读量:6262 次
发布时间:2019-06-22

本文共 4846 字,大约阅读时间需要 16 分钟。

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,通常被视为不稳定、不建议生产使用的版本。

clipboard.png
例如:

  • 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 outdated
npm outdated [[<@scope>/]
...]

clipboard.png

版本删除

npm uninstall [-g] 
[--save] [-dev] //卸载模块

npm install

npm install/i  
[--force] //安装某个包
npm i                             //当存在package.json时,使用命令可全部安装包 npm i 
@1.0.0 //安装指定版本的模块npm i
@latest //安装最新版本npm i
=0.1.0 <0.2.0"npm i
  • -S, --save 安装包信息将加入到dependencies(生产阶段的依赖)
  • -D, --save-dev 安装包信息将加入到devDependencies(开发阶段的依赖),所以开发阶段一般使用它
  • -O, --save-optional 安装包信息将加入到optionalDependencies(可选阶段的依赖)
  • -E, --save-exact 精确安装指定模块版本
  • -P, --save-prod, 添加dependencies 里面所有的包

^是npm默认版本符号,用npm i --save, npm会自动在package.json中添加。如果使用--save-exact,就不会有任何符号。

在生产环境,使用npm install --production安装 dependencies 部分的模块;
在开发环境,npm i ,安装所有devDependencies 和 dependencies里面的模块;

全局安装与本地安装

npm install/i  
//本地安装 npm install/i
--global/-g //全局安装

区别

1.安装位置

npm root -g   //查看全局node_modules路径npm root      //查看本地node_modules路径

全局安装:一般在 Users用户名AppDataRoaming 目录下。

本地安装:一般安装在指定项目的node_modules文件夹下。

2.调用方式

全局安装:用户可以在命令行中直接运行该包支持的命令。
本地安装:需在项目中引用。

修改默认全局目录与缓存

npm c get prefix       //获取npm目录npm c get cache        //获取缓存目录npm c set prefix 
//获取npm目录npm c set cache
//获取缓存目录

npm update

npm update 
-g //升级全局安装的指定模块npm update
//升级当前目录下的指定模块npm update --save-dev //升级当前目录下全部模块

package-lock 文件

把npm更新到v5.x.x以后, npm i会出现一种新的自动生成文件 - package-lock.json。

package-lock.json简言之,就是锁定安装时包的版本号。

禁用

npm c set package-lock false

安装/升级不同表现

下面的结论,配置为 node 8.9.0,npm 6.8.0。 以webpack版本为例。

npm i

1.package.json与package-lock.json版本相同情况下,npm i无效果

2.修改package.json主版本

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^2.0.0 1.5.0 1.5.0 npm i ^2.0.0 2.7.0 2.7.0

3.修改package.json次版本

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^2.5.0 2.7.0 2.7.0 npm i ^2.5.0 2.7.0 2.7.0

如果手动修改了 package.json 文件中已有模块的次版本,直接执行 npm install 不会安装新指定的版本,只会安装package-lock.json锁定版本。

4.无package-lock.json

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^3.4.0 2.7.0 npm i ^3.4.0 3.11.0 3.11.0
以下两种方式可以不管package-lock.json锁定版本,直接安装

5.npm i <package>

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^4.5.0 4.5.0 4.5.0 npm i webpack ^4.29.5 4.29.5 4.29.5

6.npm i <package@version>

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^4.5.0 4.5.0 4.5.0 npm i webpack@3.4.0 ^3.4.0 3.4.0 3.4.0

npm update

1.package.json版本比node_modules低,不会更新

2.npm update

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^4.4.0 4.4.0 4.4.0 npm update ^4.29.5 4.29.5 4.29.5

3.无node_modules,npm update不会装包,也不会更新

4.npm update --save-dev

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^3.2.0 2.7.0 2.7.0 npm update --save-dev ^3.2.0 3.12.0 3.12.0

5.npm update webpack

package.json (before) node_modules (before) package-lock.json (before) command package.json (after) node_modules (after) package-lock.json (after)
^3.2.0 2.7.0 2.7.0 npm update webpack ^3.2.0 3.12.0 3.12.0

转载地址:http://sdkpa.baihongyu.com/

你可能感兴趣的文章
Dependency Injection-依赖注入详解
查看>>
设计师图解TCP连接过程
查看>>
这其实是一个求助的文章
查看>>
你必须掌握的 RESTful 后端接口设计参考书
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
兼容iOS 10:配置获取隐私数据权限声明
查看>>
Docker 使用笔记
查看>>
jest && vue
查看>>
前端每周清单第 36 期:深入 Vue 2.5 类型增强、Puppeteer 端到端测试、PayPal 跨域套装...
查看>>
iOS - Swift 面向协议编程(二)
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
原生js轮盘抽奖实例分析(幸运大转盘抽奖)
查看>>
知否?知否?情人眼里出代码
查看>>
DataBinding数据绑定基本讲解
查看>>
15 分钟无门槛构建服务器性能监控系统
查看>>
【JS第19期】设计模式-简单工厂模式
查看>>
Flask之旅: 快速上手
查看>>
Android图片加载开源库深度推荐,安利Fresco
查看>>
聊聊flink的MemoryPool
查看>>
聊聊flink KeyedStream的KeySelector
查看>>