背景
前段时间工作因为依赖的安装引出过问题,为了避免和警示自己想着有必要记录和备份下相关的知识,在正文开始之前我想抛出几个问题也许大家会有相同的疑惑?
-
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时大家的依赖能保证一致 。