npm系列package.json与package-lock.json--温故而知新

819 阅读2分钟

背景

       前段时间工作因为依赖的安装引出过问题,为了避免和警示自己想着有必要记录和备份下相关的知识,在正文开始之前我想抛出几个问题也许大家会有相同的疑惑?

  • npm安装查找的过程是什么流程?与版本是否有关系?

  • 为什么需要lockfiles,要不要提交lockfiles?

  • 为什么又多种类型的依赖: xxxDependencies?

  • 项目中既有人使用npm又有人使用yarn会存在风险吗?

  • package.json与package-lock.json关系?

接下来让我们一起了解和记录相关的内容

npm  install经历过程

.npmrc

检查config配置时会有配置优先级的选择,具体规则如下:

项目配置文件: /project/.npmrc > 用户配置文件:~/.npmrc  > 全局配置文件:$PREFIX/etc/npmrc  > npm 内置配置文件 /path/to/npm/npmrc

npm缓存

对一个依赖包的同一版本进行本地化缓存,  获取缓存目录:npm config get cache,

从npm中v5.x.x之后 依赖的文件目录如下:

可以使用命令清除缓存:

npm  cache  clean --force

content-v2:  npm包资源内容

index-v5:  依赖包描述文件内容

缓存的存储和利用过程:

为什么需要lockfiles,要不要提交lockfiles?

      package-lock.json文件的作用是锁定依赖安装结构,目的是保证在任意机器上执行 npm install 都会得到完全相同的 node_modules 安装结果,至于要不要提交lockfiles需要视情况而定:

为什么又多种类型的依赖: xxxDependencies?

dependencies与devDependencies

但是并不是只有在dependencies中的依赖一定为打包,在devDependencies中的依赖一定不会打包,还跟项目中是否引用导入有关,命名只是一个规范

peerDependencies

项目中既有人使用npm又有人使用yarn会存在风险吗?

        yarn和npm不要混用,因为yarn install自动生成的yarn.lock而npm install自动生成的package-lock.json会互相影响冲突 。

yarn.lock文件包含yarn需要锁定整个依赖关系树中所有包的版本的所有内容 。

package-lock.json文件的作用就是锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致 。