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

npm与package.json的联系的更多相关文章

  1. node 通过指令创建一个package.json文件及npm安装package.json

    描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...

  2. npm的package.json字段含义中文文档

    简介 本文档有所有package.json中必要的配置.它必须是真正的json,而不是js对象. 本文档中描述的很多行为都受npm-config(7)的影响. 默认值 npm会根据包内容设置一些默认值 ...

  3. NodeJS - npm WARN package.json : No repository field:can not open package.json

    最近在研究node.js,在安装npm的时候发现了几个报错,瞬间蒙圈,查找文献基本解决(文献好少呀~  -.-)   一.报错:“can not open  path/path/package.jso ...

  4. npm init node 通过指令创建一个package.json文件及npm安装package.json

    描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...

  5. npm安装package.json

    npm安装package.json时,直接转到当前项目目录下,用命令npm install 或npm install --save-dev安装即可,自动将package.json中的模块安装到node ...

  6. npm 与 package.json 快速入门教程

    npm 与 package.json 快速入门教程 2017年08月02日 19:16:20 阅读数:33887 npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解 ...

  7. [转载]npm 与 package.json 快速入门教程

    npm 与 package.json 快速入门教程 2017-08-02 19:16:20 拭心 阅读数 78648更多 分类专栏: 学学前端   版权声明:本文为博主原创文章,遵循CC 4.0 BY ...

  8. npm与package.json快速入门

    本文转载自npm与package.json快速入门 导语 npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧! 读完本 ...

  9. npm中package.json详解

    通常我们使用npm init命令来创建一个npm程序时,会自动生成一个package.json文件.package.json文件会描述这个NPM包的所有相关信息,包括作者.简介.包依赖.构建等信息,格 ...

  10. npm 和package.json 文件

    你可能还记得使用vue-cli 创建vue项目.当创建项目完成后,我们进入到项目目录,启动cmd命令窗口,输入npm install,它就会安装一堆东西(依赖),然后再输入npm run dev, 我 ...

随机推荐

  1. Centos环境下部分中间件“rabbitmq、rocketmq、clickhouse”部署

    部分中间件部署 目录 部分中间件部署 docker部署rabbitmq docker部署rocketmq 单机部署clickhouse docker部署rabbitmq # 拉镜像 docker pu ...

  2. cat,more,cp,mv,rm,命令

    cat命令 查看文件内容 语法:cat[linux路径] more命令查看文件内容 more命令同样可以查看文件内容, 同cat不同的是: •cat是直接将内容全部显示出来 •more支持翻页,如果文 ...

  3. 揭秘Karmada百倍集群规模多云基础设施体系

    摘要:本文结合Karmada社区对大规模场景的思考,揭示Karmada稳定支持100个大规模集群.管理超过50万个节点和200万个Pod背后的原理 本文分享自华为云社区<Karmada百倍集群规 ...

  4. 文心一言 VS chatgpt (7)-- 算法导论2.3 3~4题

    三.使用数学归纳法证明:当n刚好是2的幂时,以下递归式的解是 T(n)=nlgn.若n=2,T(n)=2:若n=2^k,k>1,T(n)=2T(n/2)+n. 文心一言: chatgpt: 首先 ...

  5. [C#]插件编程框架 MAF 开发总结

    1. 什么是MAF和MEF? MEF和MEF微软官方介绍:https://learn.microsoft.com/zh-cn/dotnet/framework/mef/ MEF是轻量化的插件框架,MA ...

  6. 代码随想录算法训练营Day46 动态规划

    代码随想录算法训练营 代码随想录算法训练营Day46 动态规划| ●  139.单词拆分 关于多重背包,你该了解这些! 背包问题总结篇! 139.单词拆分 题目链接:139.单词拆分 给定一个非空字符 ...

  7. 谈谈ChatGPT是否可以替代人

    起初我以为我是搬砖的,最近发现其实只是一块砖,哪里需要哪里搬. 这两天临时被抽去支援跨平台相关软件开发,帮忙画几个界面.有了 ChatGPT 之后就觉得以前面向 Googel 编程会拉低我滴档次和逼格 ...

  8. DB事物

    1.事物概念:一组逻辑操作单元 始数据从一种状态变换到另一种状态事物处理:所有事物 都作为一个工作单元来执行 , 即使出现了故障 都不能改变这种执行方式, commint提交之后 这些修改就永久的保存 ...

  9. 【Python&GIS】GDAL栅格转面&计算矢量面积

            GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它 ...

  10. DHCP配置;DHCP Relay配置

    目录 DHCP 配置 实验拓扑 实验需求 实验步骤 1. 基于全局地址池的DHCP服务器给客户端分配IP地址 DHCP server 上配置如下 2. 在PC1上设置为DHCP自动获取方式,ipcon ...