理解 package-lock.json 何时推送与忽略

news2025/1/25 4:01:46

package.json 和 package-lock.json 是 Node.js 和前端开发中的核心配置文件,管理着项目的依赖关系、脚本和其他重要配置。下面简单介绍下这两个文件以及它们的使用规则。

1. package.json

package.json 是 Node.js 和 JavaScript 项目的配置文件,它包含了项目的元数据(如名称、版本、描述等)以及项目的依赖管理。

1.1 项目元数据

1、name:项目的名称。必须是小写字母和中划线(-)的组合,通常用于 npm 包发布。

2、version: 项目的版本,遵循 semver(语义化版本)规范。

3、main:指定该项目的入口文件,通常是 index.js。

4、scripts:定义 npm 脚本命令,比如:npm start、npm run build 等,这些命令可以用于自动化执行构建、测试等操作。

5、description:项目的简短描述,通常是对项目功能的概述。

🌰

{
  "name": "my-vue-app",
  "version": "1.0.0",
  "description": "A Vue.js application",
  "main": "index.js"
}
1.2 依赖管理

package.json 文件指定了项目的 依赖,分为两种类型:

1、dependencies:项目在运行时需要的依赖。一般来说,这些是项目正常运行时必需的库和工具。

2、devDependencies:开发过程中需要的依赖。比如,构建工具、测试工具、开发服务器等。

🌰

{
  "dependencies": {
    "vue": "^3.2.0",
    "axios": "^0.21.0"
  },
  "devDependencies": {
    "webpack": "^5.0.0",
    "babel-loader": "^8.2.2"
  }
}
1.3 脚本管理

package.json 文件中的 scripts 字段允许我们自定义命令,可以让开发者通过 npm 或 yarn 来执行一系列的构建任务。比如:配置 build、serve、test 等命令。

常见的脚本包括:

- start:启动开发服务器,通常会调用 vue-cli-service serve 或其他工具来启动一个本地开发环境。

- build:用于构建生产环境的代码,通常会调用 vue-cli-service build 进行打包。

- test:执行单元测试。

🌰

{
  "scripts": {
    "start": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test": "jest"
  }
}
1.4 版本控制

package.json 中的 version 字段遵循 semver(语义化版本)规范规则,帮助团队和开发者清楚地了解每个版本的变化。

- 主版本号(major):当修改了不兼容的 API,增加了破坏性的改动时,升级主版本号。

- 次版本号(minor):当向下兼容的功能中增加了新功能时,升级次版本号。

- 修订版本号(patch):当修复了向下兼容的问题时,升级修订版本号。

🌰

{
  "version": "1.2.3"
}
1.5 package.json 的目的

1、简化项目配置

将项目的关键信息、脚本、依赖等内容集中存储,方便开发者和构建工具访问和管理。

2、共享项目依赖

通过 npm install 或 yarn install 安装依赖时,package.json 文件会根据预设的依赖版本范围安装匹配的依赖。

2. package-lock.json

package-lock.json 是自动生成的文件,用于锁定所有项目依赖的版本,以确保每次安装依赖时使用相同版本的包。这个文件不会手动编辑,它会由 npm install 自动创建和更新。

2.1 作用

1、锁定依赖版本

package-lock.json 中记录了 node_modules 中每个依赖包的确切版本。这样即便 package.json 中的版本范围使用的是类似 ^~ 这种可变的版本号,package-lock.json 会确保每次 npm install 时,依赖的版本是相同的。

2、提高安装速度

由于 package-lock.json 中包含了每个包的准确版本信息,npm 可以更快地查找依赖并避免不必要的版本解析。

3、确保一致性

保证团队中的每个开发者和 CI/CD 环境中使用相同的依赖版本,避免了 "works on my machine" 的问题。

2.2 文件内容 🌰
{
  "name": "my-project",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "dependencies": {
    "express": {
      "version": "4.17.1",
      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
      "integrity": "sha512-...",
      "dev": false
    },
    "lodash": {
      "version": "4.17.21",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
      "integrity": "sha512-..."
    }
  }
}

字段解释:

1、lockfileVersion:指示 package-lock.json 的版本,当前为版本 1。

2、dependencies:每个依赖项的详细信息,包括:

- version:该依赖的确切版本。

- resolved:依赖包的 tarball URL。

- integrity:包内容的校验,用于确保下载的包没有被篡改。

- dev:指示依赖是开发依赖还是生产依赖。

3. ^ 和 ~ 的作用

在 package.json 中指定依赖版本时,常常会使用 ^~ 来允许一些版本范围。

3.1 ^(Caret)

表示兼容主版本号不变的最新次版本。即只会安装不改变 API 的版本。例如:

- "express":"^4.17.1" 表示允许安装 4.x.x 的所有版本(eg:4.18.0,4.19.1 等),但不运行安装 5.x.x 或更高版本。

- ^1.0.0 允许更新到 2.x.x 之前的任何版本。

3.2 ~(Tilde)

表示兼容次版本号不变的最新修订版本。即仅允许更新到同一 minor 版本中的新版本。例如:

"express":"~4.17.1" 表示允许安装 4.17.x 版本(如:4.17.3),但不允许安装 4.18.0 版本或更高。

3.3 *

表示接受所有版本。

3.4 >=<=

表示接受大于或小于某个版本的所有版本。

4. 什么时候推送 package-lock.json?

4.1 推送

始终将 package-lock.json 文件提交到版本控制系统(如 git),保证团队中的每个开发者都能使用相同版本的依赖,避免因不同版本导致的错误。

📢:在 package.json 或其他文件更新了依赖后(如新增or删除包),一定要将 package-lock.json 一并推送。

4.2 不推送

在某些开源项目中不推送,尤其是对于一些 库 类的项目,是因为:

1、用户需求的灵活性:开发者希望根据自己的需求自由选择依赖版本,而不是被锁定。

2、避免依赖冲突:如果一个库的 package-lock.json 锁定了某个版本,但它的使用者已经有其他版本的依赖,可能会发生冲突,特别是在跨库、跨团队的合作中。

单纯的前端项目依赖(例如:没有 Node.js 环境要求)且不会涉及多人开发时,可能不需要提交 package-lock.json,但在实际生产环境中推荐提交。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2281762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW太赫兹二维扫描成像系统

使用LabVIEW设计太赫兹二维扫描成像系统。通过LabVIEW平台开发&#xff0c;结合硬件如太赫兹源、平移台、锁相放大器等&#xff0c;实现了高效、精准的成像功能。系统采用蛇形扫描方式&#xff0c;通过动态调整扫描参数&#xff0c;达到优化成像质量的目的。 ​ 项目背景 在非…

Quartus:开发使用及 Tips 总结

Quartus是Altera&#xff08;现已被Intel收购&#xff09;推出的一款针对其FPGA产品的综合性开发环境&#xff0c;用于设计、仿真和调试数字电路。以下是使用Quartus的一些总结和技巧(Tips)&#xff0c;帮助更高效地进行FPGA项目开发&#xff1a; 这里写目录标题 使用总结TIPS…

Android 自定义View时四个构造函数使用详解

该文章我们以自定义View继承TextView为例来讲解 创建自定义View命名MyTextView&#xff0c;并使其继承TextView 1、自定义View时第一个构造函数 // 第一个构造函数主要是在Java代码中声明一个MyTextView时所用 // 类似这种(MyTextView myTextViewnew MyTextView(this);) // 不…

C#PaddleOCRSharp使用

using PaddleOCRSharp;namespace PaddleOCRSharpDemo {internal class Program{static void Main(string[] args){//中英文模型V3模型OCRModelConfig config null;//OCR参数OCRParameter oCRParameter new OCRParameter();oCRParameter.cpu_math_library_num_threads 6;//预…

vscode配置C/C++环境(详细步骤教程)

本章教程,主要介绍如何在vscode中配置c/c++环境的具体步骤。 一、安装mingw64 链接:https://pan.baidu.com/s/1fwS-CwC7dgIYJTanaINOhA?pwd=rdks 提取码:rdks 下载之后,配置将mingw64添加到系统环境变量中。 二、安装vscode插件 需要在vscode插件商店,安装c/c++插件 三、配…

隐私保护+性能优化,RyTuneX 让你的电脑更快更安全

RyTuneX 是一款专为 Windows 10 和 11 用户量身打造的系统优化工具&#xff0c;采用先进的 WinUI 3 框架开发&#xff0c;以其现代化的设计风格和强大的功能集合脱颖而出。这款工具不仅界面简洁美观&#xff0c;还提供了多样化的系统优化选项&#xff0c;旨在帮助用户最大化设备…

JAVA:Spring WebClient 的应用指南

1、简述 随着微服务架构的普及&#xff0c;服务间的 HTTP 通信需求也越来越多。Spring 提供的 WebClient 是 RestTemplate 的替代方案&#xff0c;支持响应式编程&#xff0c;具有非阻塞的特点&#xff0c;非常适合处理高并发的 HTTP 请求。本文将介绍 WebClient 的基本用法及…

如何给自己的域名配置免费的HTTPS How to configure free HTTPS for your domain name

今天有小伙伴给我发私信&#xff0c;你的 https 到期啦 并且随手丢给我一个截图。 还真到期了。 javapub.net.cn 这个网站作为一个用爱发电的编程学习网站&#xff0c;用来存编程知识和面试题等&#xff0c;平时我都用业余时间来维护&#xff0c;并且还自费买了服务器和阿里云…

深度学习 Pytorch 动态计算图与梯度下降入门

在上节末尾我们发现autograd.grad函数可以灵活进行函数某一点的导数和偏导数的运算&#xff0c;但微分运算只是AutoGrad模块中的一小部分功能&#xff0c;本节将继续讲解这个模块的其他常用功能&#xff0c;并在此基础上介绍另一个常用优化算法&#xff1a;梯度下降算法。 imp…

gitlab使用多数据库

1. 说明 默认情况下&#xff0c;GitLab 使用一个单一的应用数据库&#xff0c;称为主数据库。为了扩展 GitLab&#xff0c;您可以将 GitLab 配置为使用多个应用数据库。 设置多个数据库后&#xff0c;GitLab 将使用第二个应用数据库用于 CI/CD 功能&#xff0c;称为 CI 数据库…

Docker网段和服务器ip冲突导致无法访问网络的解决方法

若宿主机所在网络的网段为172.[17-31].xx.xx&#xff0c;则会与Docker本身内部网络间出现冲突&#xff0c;此时需要重新配置Docker默认地址池 一&#xff1a;查看docker的默认网段 route 二&#xff1a;修改docker的默认网段 etc/docker/daemon.json文件增加修改网段信息 {…

HTML<img>标签

例子 如何插入图片&#xff1a; <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…

leetcode_3092. 最高频率的 ID

https://leetcode.cn/problems/most-frequent-ids/description/ 看到这个数据范围 最极端情况 如果nums全为一个数 并且数量取到最大 那么范围是10的10次方 需要longlong储存 这题主要运用了哈希表配合multiset实现 哈希表主要用作存储某个数的出现次数 mst则用于记录出现次…

01学习nodejs的准备工作

01学习nodejs的准备工作 1.回顾与思考1.1为什么JavaScript可以在浏览器中被执行1.2为什么JavaScript可以操作DOM和BOM&#xff1f;1.3浏览器中的JavaScript运行环境1.4JavaScript 能否做后端开发 2.Nodejs简介2.1什么是nodejs2.2 Node.js中的 JavaScript 运行环境2.3 Node.js可…

2024年度总结-CSDN

2024年CSDN年度总结 Author&#xff1a;OnceDay Date&#xff1a;2025年1月21日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…

2024年度技术总结——MCU与MEMS和TOF应用实践

引言 2024年对我来说是技术成长与突破的一年。在这一年里&#xff0c;我不仅在技术领域拓展了深度和广度&#xff0c;还通过与客户合作的实际项目&#xff0c;成功实现了从单一MCU到MCU、MEMS与TOF技术融合的跨越。这一过程中&#xff0c;我深刻认识到&#xff0c;技术的进步不…

五、深入了解IoC

IoC控制反转&#xff0c;就是将对象的控制权交给Spring的IOC容器&#xff0c;由IOC容器创建及管理对象。也就是bean的存储。 5.1Bean的存储 共有两类注解类型可以实现&#xff1a; 1.类注解&#xff1a;Controller、Service、Repository、Component、Configuration. 2.方法注…

python-leetcode-有效的字母异位词

242. 有效的字母异位词 - 力扣&#xff08;LeetCode&#xff09; class Solution:def isAnagram(self, s: str, t: str) -> bool:return sorted(s) sorted(t)

RHCE实验详解

目录 实验分析 环境拓扑结构 项目需求 主机环境描述 实验步骤 一、密钥互信和主机名更改 二、DNS 三、NGINX 四、MARIADB 五、NFS 六、NTP 七、论坛服务 结果展示及痛点解答 实验分析 环境拓扑结构 项目需求 1. 172.25.250.101 主机上的 Web 服务要求提供 www.ex…