乐趣区

关于前端:npm与packagejson的联系

在 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 库中下载压缩包。

退出移动版