package.json和package-lock.json依赖包文件

news/2025/1/15 19:52:03/

一、package.json

package.json 是在运行 “ npm init ”时生成的,主要记录项目依赖

  • name:项目名,也就是在使用npm init 初始化时取的名字,但是如果使用的是npm init -y
    快速初始化的话,那这里的名字就是默认存放这个文件的文件名;
  • version:版本号;
  • private:希不希望授权别人以任何形式使用私有包或未发布的;
  • scripts-serve:是vue的项目启动简写配置;
  • scripts-build:是vue的打包操作简写配置;
  • dependencies:指定了项目运行时所依赖的模块;
  • devDependencies:指定项目开发时所需要的模块,也就是在项目开发时才用得上,一旦项目打包上线了,就将移除这里的第三方模块;

axios在package.json中的样子:

"dependencies": { // 指定项目运行时所依赖的模块"axios": "^0.27.2",},

二、package-lock.json

package-lock.json是在运行“npm install”时生成的一个文件,用于记录当前状态下项目中实际安装的各个package的版本号、模块下载地址、及这个模块又依赖了哪些依赖。

axios在package-lock.json中的样子:

"packages": {"": {"name": "vuerender","version": "0.1.0","dependencies": {"axios": "^0.27.2","core-js": "^3.8.3","element-ui": "^2.15.6","vue": "^2.6.14","vue-router": "^3.5.4","vuex": "^3.6.0"},
//============================================================================
"node_modules/axios": {"version": "0.27.2","resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", // resolved表示安装包的真实地址"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",// integrity表示安装包的hash值"dependencies": { // dependencies表示安装包的依赖"follow-redirects": "^1.14.9","form-data": "^4.0.0"}},// =================================================================
"axios": {"version": "0.27.2","resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz","integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==","requires": { // requires表示依赖的包"follow-redirects": "^1.14.9","form-data": "^4.0.0"}}, 

三、语义化版本(semver)

指定版本:比如 1.2.2 ,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。

波浪号(tilde)+指定版本:比如 ~1.2.2 ,表示安装 1.2.x 的最新版本(不低于1.2.2),但是不安装 1.3.x,也就是说安装时不改变大版本号和次要版本号。

插入号(caret)+指定版本:比如 ˆ1.2.2,表示安装 1.x.x 的最新版本(不低于 1.2.2),但是不安装 2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为 0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。

latest:安装最新版本。

四、为什么有了package.json,还需要package-lock.json文件呢?

当项目中已有 package-lock.json 文件,在安装项目依赖时,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块。因为 package 只是指定的版本不够具体,而package-lock 为每个模块及其每个依赖项指定了版本,位置和完整性哈希,所以它每次创建的安装都是相同的。无论你使用什么设备,或者将来安装它都无关紧要,每次都应该给你相同的结果。

五、npm install的过程

npm install的过程大致就是从package.json中读取所有的依赖信息,然后再与node_modules中已经安装的依赖进行对比,如果没有安装,则通过package-lock.json获取相应版本号下载安装.如果已经存在,则会通过package-lock.json检查更新。

进行更新的原则就是其范围是在package.json中对应安装包版本所容纳的版本。^ 就是指兼容该版本以后的小版本而不更新大版本,如上图package.json所示,“vue”:" ^ 2.5.2"也就是指范围应该在>=2.5.2和<3.0.0之间(tips:网上大多数帖子说的比较笼统,而参考其中的一篇帖子大致就是,^会忽视版本号开头为0的数字,也就是说"axios":"0.19.0"的范围应该在>=0.19.0和<0.20.0之间)

npm5 版本下 install 规则

npm 并不是一开始就是按照现有这种规则制定的。
5.0.x 版本:

不管 package.json 中依赖是否有更新,npm install 都会根据 package-lock.json 下载。针对这种安装策略,有人提出了这个 issue[6] ,然后就演变成了 5.1.0 版本后的规则。

5.1.0 版本后:

当 package.json 中的依赖项有新版本时,npm install 会无视 package-lock.json 去下载新版本的依赖项并且更新 package-lock.json。针对这种安装策略,又有人提出了一个 issue[7] 参考 npm 贡献者 iarna 的评论,得出 5.4.2 版本后的规则。

5.4.2 版本后:

如果只有一个 package.json 文件,运行 npm install 会根据它生成一个 package-lock.json 文件,这个文件相当于本次 install 的一个快照,它不仅记录了 package.json 指明的直接依赖的版本,也记录了间接依赖的版本。

如果 package.json 的 semver-range version 和 package-lock.json 中版本兼容(package-lock.json 版本在 package.json 指定的版本范围内),即使此时 package.json 中有新的版本,执行 npm install 也还是会根据 package-lock.json 下载。

如果手动修改了 package.json 的 version ranges,且和 package-lock.json中版本不兼容,那么执行 npm install 时 package-lock.json 将会更新到兼容 package.json 的版本。

六、npm install安装的包在dependencies中,还是Devdependencies中?

简单说,不带-dev参数,则安装保存到dependencies中,如果带参数-dev,则保存到Devdependencies中

npm  install ... --save    //通过--save的方式来保存到dependencies中npm install ... --save-dev     //通过--save-dev的方式来保存到Devdependencies中

npm install是将package.json下面的所有依赖报全部进行安装,而npm install --production则只是安装dependencies下的依赖而不安装Devpendecies下的。

参考:
1.https://blog.csdn.net/weixin_51670675/article/details/120819061
2.https://blog.csdn.net/qq_34998786/article/details/117138142
3.https://juejin.cn/post/6844903907290775565


http://www.ppmy.cn/news/470810.html

相关文章

液晶屏背光LED驱动电路设计参考

最近很多朋友因为液晶屏背光驱动在烦恼&#xff0c;我总结一下。 市面上TFT液晶屏使用的时候&#xff0c;都需要将背光LED点亮&#xff0c;液晶显示的内容才看得到&#xff0c;因为TFT属于被动式显示。 液晶屏常用的背光LED灯驱动方式有3这种&#xff1a; 1.并联型&#xff08…

Java实体间转换并导出excel

两个实体间转换导出excel 首先建两个实体 public class Order { private Long id; private String orderNo; private String customerName; private Date createTime; // getter 和 setter 方法 } public class OrderVO { private String orderNo; private String customerNam…

操作系统期末复习简记(更新中~)

文件 定义&#xff1a;文件是以计算机硬盘为载体的存储在计算机上的信息集合&#xff08;宽泛的&#xff09; 属性&#xff1a;描述文件状态的信息&#xff0c;eg.名称&#xff0c;修改时间等等 基本操作&#xff1a;创建、打开、修改文件 文件的逻辑结构 1、无结构文件&#x…

C语言结构体计算大小结构体的对齐数,修改默认对齐数。

结构体的对齐规则 第一个成员在与结构体变量偏移量为0的地址处。剩余成员变量要对齐到对齐数的整数倍的地址处。 对齐数&#xff1a;编译器默认对齐数与该成员大小的较小值vs中默认对齐数为8没有默认对齐数&#xff0c;那么对齐数就是其本身成员大小 结构体总大小为最大对齐数…

优酷视频怎么转二维码_优酷视频转二维码

有的人想将自己制作的视频分享出去&#xff0c;那么该如何将视频转换成二维码来分享呢?其实方法很简单&#xff0c;直接在视频界面中就能生成&#xff0c;这里和大家讲讲。 01、 登录自己的优酷帐号&#xff0c;然后点击右上角的上传按钮。 优酷视频怎么转二维码_优酷视频转…

优酷kux怎么转码mp4

2021年3月3日实测可行。 可以借助优酷自带的解码器进行kux转码成mp4&#xff0c;以下方法能转1080P及4K非独播的剧&#xff0c;大家可以新建一个文本文档然后把以下文字复制进去然后另存为bat&#xff0c;这个bat只要在kux所在目录运行就可以将所有kux自动转换成mp4&#xff0…

Vue2 插槽

1.什么是插槽 插槽(Slot)是vue为组件的封装者提供能力。允许开发者在封装组件时&#xff0c;把不确定的&#xff0c;希望由用户指定的部分定义为插槽。 <template><div id""><h1>App根组件</h1><!-- Left组件和Right组件渲染区域 -->&…

解决耳机插电脑 只有背景音乐

打开控制面板 点击 管理音频 将扬声器设为默认&#xff0c;如果是的话跳过这一步 打开扬声器属性 点击 级别 — 平衡 播放音乐&#xff0c;调节左前&#xff0c;右前 调整到最舒服的位置&#xff0c;确定退出就可以了 PS&#xff1a;如果有帮助&#xff0c;记得点赞哦&#xf…