在nodejs编写的脚手架我的项目中,npm是不可短少的包管理工具,当应用npm初始化时,会生成package.json文件来对我的项目进行整体的治理和形容
以下是新建的练习我的项目中package.json文件,初始化我的项目之后,装置了axios
以上每个配置信息别离对应的含意如下
(1)name * 项目名称 (2)version * 以后版本号 (3)description 是形容信息 (4)main: 'index.js' 示意我的项目入口(5)script 用于配置脚本信息 start/stop/test/restart 时, npm run start中的run能够省略(6)author 作者 (公布时用到) (7)license 开源协定 (公布时用到) (8)dependencies 依赖 开发环境生产环境都须要(9)devDependencies 开发时依赖的库, 生产环境不须要应用
以上我的项目通过 npm install axios 为我的项目增加了axios,所以在dependencies下增加了aixos,装置的时候除了在node_modules会减少对应的依赖外,在package-lock.json会指明axios具体的版本以及axios外部的依赖,能够看到package-lock.json文件中,axios版本为0.21.1
但,有一点很奇怪,明明我只装置了 axios,为什么 package-lock.json 的dependencies 中还有一个 "follow-redirects",咱们找到 node_modules 中装置的包文件,发现的确有axios和follow-redirects,关上axios的package.json文件,能够看到在axios的生产依赖 dependencies 中增加了 "follow-redirects",所以在装置 axios 的时候,主动帮咱们装置了它所依赖的包,而 devDependencies 中依赖的包都没有装置,这也验证了一点,devDependencies只会被用于开发中,生产当中是不会装置的
当咱们拿到一个新我的项目的时候,通常是没有node_modules文件夹的,咱们须要自行通过 npm install 来装置所有的依赖,当执行 npm install 的时候具体进行了哪些操作呢?
如图所示,当我的项目中存在package.json文件执行 npm install 的时候,首先会判断是否存在 package-lock.json 文件,没有 lock 文件的话,会依据 package.json 文件建设依赖关系,而后去存储 npm 各种工具的 registry 库中查找依赖并获取压缩包,此时会将压缩包缓存下来,而后将压缩包增加到 node_modules中,增加到 node_modules 后会生成 package-lock.json 中记录下载的版本和依赖关系。
如果存在 package-lock.json 文件,直接判断packge.json 所需依赖中与lock文件中依赖是否统一,不统一再从新建设依赖关系,统一的时候去缓存中查找缓存文件,没找到缓存文件就自行去 registry 库中下载压缩包。