npm 打包版本问题

215 阅读2分钟

版本号详解

示例:1.1.1(主要版本号.次要版本号.修补版本号)

major 表示非兼容的重大 API 改变(主要的)

minor 表示向后兼容的功能性改变(次要的)

patch 表示向后兼容的 bug 修正(修补的)

版本号前缀:

  • * 匹配最新主版本

  • ^ 匹配最新的次版本

  • ~ 匹配最新的修补版本

package.json 与package.lock文件

  • package.json 记录项目中所需要的模块,这些模块所依赖的其他子模块的信息不会记录。
  • package-lock.json 文件锁定所有模块的版本号,包括主模块和所有依赖子模块

当你执行npm install的时候,node从package.json文件读取模块名称,从package-lock.json文件中获取版本号,如果node_modules中没有则进行下载,有但版本号不一致则会更新模块。 

因为package-lock.json文件锁定了版本号,所以想要升级模块版本必须用npm install packagename(自动更新小版本号)或者npm install packagename@x.x.x(指定版本号)来进行安装,才会更新package.json文件,package.json文件更新,package-lock.json文件中的版本号也会随着更新。

附:当package.json与package-lock.json都不存在,执行"npm install"时,node会重新生成package-lock.json文件,将node_modules中的模块信息全部记入package-lock.json文件,但不会生成package.json文件,此时,你可以通过"npm init --yes"来生成package.json文件

  1. lock 文件存在
  • npm install 会按照 lock 对应包版本进行安装,不会自动升级

    • 手动更改 package 中的包版本, lock 会按照 package 更新到最新版本
  • npm update 会按照 package 对应包版本前缀升级规范安装到最新到版

    • package 中对应包版本号改变
    • lock 中对应包版本号改变【最新版与 lock 中相同则不变】
  1. lock 文件不存在
  • npm install 会按照 package.json 升级到最新到版本

    • package.json 安装最新版
    • lock 中按package规范同步升级到最新版
  • npm updatenpm install 相似

    • 但会忽略 devDependencies 开发依赖包将不会更新
    • 添加了 -D 才会在安装更新 dependencies 下的前提下更新安装 devDependencies 下对应的依赖包

npm-check-updates

npm install npm-check-updates -g
  • 检查可更新模块
ncu 或 npm-check-updates

image.png

  • 更新可更新模块【并不建议一次性更新所有可更新依赖包】(更新包括 major 位的更新)
ncu -u [packageName]

五、npm updatenpm-check-updates的区别

npm update [packageName] 会同步更新 package-lock.json 的版本

npm-check-updates会更新 package.json 中的安装包,但不会更新 package-lock.json 中的版本