# npm相关

# package.json中版本号

package.json的版本号,~^是有区别的。

"lodash": "^4.17.20"为例:

  • ~: 使用install安装时,会忽略最后一位20,安装4.17.X的最新版本
  • ^: 使用install安装时,会忽略后面2位,安装4.X.X的最新版本

# 线上npm安装优化

我们知道,常用的package.json中有3个标签管理版本,分别是:dependenciesdevDependenciespeerDependencies。作用也很明显:

  • dependencies: 代码中需要用到的依赖包
  • devDependencies: 开发环境下需要用到的依赖包,比如常见的eslintbabelwebpack这种工具类的
  • peerDependencies: 当作为第3方库使用时,比如lodash的库,它如果在这里配置了一个xx的包,在安装时并不会下载xx,而是安装完成后如果没有找到这个xx,会提示你自行安装。

那么对于线上npm安装(一般是CICD自动化任务构建)时,devDependencies肯定是没有必要的,就不必使用npm install进行安装,有2种方式:

  • npm ci,它会根据package-lock.json文件,快速安装,应该是会忽略一些install时的逻辑,速度会很快。当然,如果没有这个文件,就会报错了。
  • npm i --production,它会忽略devDependencies下的安装包。所以,使用它时,必须确保你代码中的依赖都在dependencies中。