美文网首页
npm与package.json的联系

npm与package.json的联系

作者: 一颗冰淇淋 | 来源:发表于2021-07-04 23:08 被阅读0次

    在nodejs编写的脚手架项目中,npm是不可缺少的包管理工具,当使用npm初始化时,会生成package.json文件来对项目进行整体的管理和描述

    以下是新建的练习项目中package.json文件,初始化项目之后,安装了axios

    packagejson文件.png

    以上每个配置信息分别对应的含义如下

    (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

    packagelock文件.png

    但,有一点很奇怪,明明我只安装了 axios,为什么 package-lock.json 的dependencies 中还有一个 "follow-redirects",我们找到 node_modules 中安装的包文件,发现确实有axios和follow-redirects。
    打开axios的package.json文件,可以看到在axios的生产依赖 dependencies 中添加了 "follow-redirects",所以在安装 axios 的时候,自动帮我们安装了它所依赖的包,而 devDependencies 中依赖的包都没有安装,这也验证了一点,devDependencies只会被用于开发中,生产当中是不会安装的

    axios内部的依赖.png

    当我们拿到一个新项目的时候,通常是没有node_modules文件夹的,我们需要自行通过 npm install 来安装所有的依赖,当执行 npm install 的时候具体进行了哪些操作呢?

    npminstall的流程.png

    如图所示,当项目中存在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 库中下载压缩包。

    相关文章

      网友评论

          本文标题:npm与package.json的联系

          本文链接:https://www.haomeiwen.com/subject/uznvultx.html