当前位置: 首页 > news >正文

前端工程化-包管理NPM-package.json 和 package-lock.json 详解

package.json 和 package-lock.json 详解

1.package.json

基本概念

package.json 是 Node.js 项目的核心配置文件,它定义了项目的基本信息、依赖项、脚本命令等。

主要字段

  1. 基本信息字段

    • name: 项目名称(必填)

    • version: 项目版本(必填,遵循语义化版本规范)  版本号形如:X.Y.Z,有三部分组成,依次叫主版本号次版本号修订号

    • description: 项目描述

    • author: 作者信息

    • license: 开源许可证

  2. 依赖管理字段

    • dependencies: 生产环境依赖

    • devDependencies: 开发环境依赖

    • peerDependencies: 同伴依赖

    • optionalDependencies: 可选依赖

  3. 脚本字段

    • scripts: 定义可以通过 npm run 执行的脚本命令

  4. 其他配置

    • main: 项目入口文件

    • repository: 代码仓库信息

    • keywords: 关键词数组,用于 npm 搜索

    • engines: 指定 Node.js 和 npm 的版本要求

示例

{"name": "my-project","version": "3.2.1","description": "A sample project","main": "index.js","scripts": {"start": "node index.js","test": "jest"},"dependencies": {"express": "^4.17.1"},"devDependencies": {"jest": "^26.6.3"}
}

2.package-lock.json

基本概念

package-lock.json 是 npm 5+ 版本引入的文件,用于锁定依赖树的确切版本,确保不同环境下安装完全相同的依赖。

主要特点

  1. 自动生成:由 npm 自动创建和维护,使用 npm install 安装包后就会自动生成。

  2. 精确版本控制:记录每个依赖包的确切版本

  3. 依赖关系树:完整记录依赖树结构

  4. 安装优化:加快后续安装速度

文件作用

  1. 版本锁定:防止因语义化版本导致的意外升级

  2. 一致性保证:确保团队成员和 CI/CD 系统使用相同的依赖版本

  3. 安装效率:记录已解析的依赖树,避免重复计算

与 package.json 的关系

  • package.json 定义的是版本范围

  • package-lock.json 记录的是确切版本

  • 当两者冲突时,以 package-lock.json 为准(npm 5+)

3.最佳实践

  1. 版本管理

    • 将 package-lock.json 提交到版本控制系统

    • 不要手动修改 package-lock.json

  2. 依赖安装

    • npm 安装包的方式分为本地安装和全局安装。安装使用npm install或简写形式npm i。
      本地安装

    • 使用 npm ci 命令(基于 package-lock.json 安装,用于生产环境)

    • 使用 npm install <参数>  <package-name> 命令(会更新 package-lock.json,用于开发环境)

    • 全局安装 

      npm i -g  <package-name>npm i --global <package-name>
    • 让安装的包放到对应依赖位置

      开发依赖(devDependencies)中,传递参数 --save-dev 或 -D 即可。

      生产依赖(dependencies)中,传递参数 --save 或 -S 即可。

      不想放在开发依赖也不想放在生产依赖,使用npm install --no-save。

          注意:包默认安装到生产依赖(dependencies)中

      线上环境,只需要安装dependencies中的包,使用npm install --prod命令。

    • 删除包 

      •   npm uninstall  <package-name>
        // 简写形式
        npm un  <package-name>

      • 全局删除     npm uninstall -g   <package-name>

  3. 更新依赖

    • 使用 npm update 更新次要版本和补丁版本

    • 使用 npm install package@version 更新主版本

  4. 安全考虑

    • 定期运行 npm audit 检查安全漏洞

    • 使用 npm audit fix 修复已知漏洞

4.常见问题

        4.1: 为什么有时 node_modules 和 package-lock.json 会不一致?

                 通常是因为手动修改了 package.json 或在不同 npm 版本间切换导致的。可以删除         node_modules 和 package-lock.json 后重新安装。

        4.2.可以删除 package-lock.json 吗?

                不推荐,删除后会导致依赖版本不确定性,可能引入兼容性问题。

        4.3. yarn.lock 和 package-lock.json 有什么区别?
                两者功能类似,都是锁定依赖版本,只是格式不同。yarn.lock 是 Yarn 包管理工具生成的。

相关文章:

前端工程化-包管理NPM-package.json 和 package-lock.json 详解

package.json 和 package-lock.json 详解 1.package.json 基本概念 package.json 是 Node.js 项目的核心配置文件&#xff0c;它定义了项目的基本信息、依赖项、脚本命令等。 主要字段 基本信息字段 name: 项目名称&#xff08;必填&#xff09; version: 项目版本&#xf…...

如何在 Linux 中彻底终止被 `Ctrl+Z` 挂起的进程?

问题场景 在 Linux 终端操作时&#xff0c;你是否曾遇到过这样的情况&#xff1f; 当运行一个命令&#xff08;如 ping www.baidu.com&#xff09;时&#xff0c;不小心按下了 CtrlZ&#xff0c;屏幕上显示类似以下内容&#xff1a; ^Z [2] 已停止 ping www.b…...

人工智能100问☞第3问:深度学习的核心原理是什么?

目录 一、通俗解释 二、专业解析 三、权威参考 深度学习的核心原理是​​通过构建多层神经网络结构,逐层自动提取并组合数据特征,利用反向传播算法优化参数,从而实现对复杂数据的高层次抽象和精准预测​​。 一、通俗解释 ​​深度学习的核心原理,就像是教计算机像婴儿…...

基于若依和elementui实现文件上传(导入Excel表)

基于若依和elementui实现文件上传&#xff08;导入Excel表&#xff09; 前端部分&#xff1a; 若依封装了Apache的poi功能&#xff0c;实现文件的上传和下载 若依使用的是JS语法&#xff0c;需要改造为JS语法才能使用 若依如何解决跨域的问题&#xff1a; 在前端的配置文件中…...

2025年第十六届蓝桥杯省赛真题解析 Java B组(简单经验分享)

之前一年拿了国二后&#xff0c;基本就没刷过题了&#xff0c;实力掉了好多&#xff0c;这次参赛只是为了学校的加分水水而已&#xff0c;希望能拿个省三吧 >_< 目录 1. 逃离高塔思路代码 2. 消失的蓝宝思路代码 3. 电池分组思路代码 4. 魔法科考试思路代码 5. 爆破思路…...

OpenHarmony人才认证证书

OpenHarmony人才认证体系目前支持初级工程师认证&#xff0c;要求了解OpenHarmony开源项目、生态进展及系统移植等基础知识&#xff0c;熟练掌握OpenHarmony的ArkUI、分布式软总线、分布式硬件、分布式数据管理等基础能力使用&#xff0c;具备基础的开发能力。 考试流程可参考O…...

Docker--利用dockerfile搭建mysql主从集群和redis集群

Docker镜像制作的命令 链接 Docker 镜像制作的注意事项 链接 搭建mysql主从集群 mysql主从同步的原理 MySQL主从同步&#xff08;Replication&#xff09;是一种实现数据冗余和高可用性的技术&#xff0c;通过将主数据库&#xff08;Master&#xff09;的变更操作同步到一个…...

LLaMA-Factory双卡4090微调DeepSeek-R1-Distill-Qwen-14B医学领域

unsloth单卡4090微调DeepSeek-R1-Distill-Qwen-14B医学领域后&#xff0c;跑通一下多卡微调。 1&#xff0c;准备2卡RTX 4090 2&#xff0c;准备数据集 医学领域 pip install -U huggingface_hub export HF_ENDPOINThttps://hf-mirror.com huggingface-cli download --resum…...

使用ZSH美化Windows系统Git Bash

此前&#xff0c;我们讲解了一种借助 Windows Subsystem for Linux&#xff08;WSL&#xff09;让用户在 Windows 操作系统中运用 Linux Shell 命令&#xff0c;进而高效地实现文件访问、编译等开发工作。 Windows系统命令行的最佳实践 | 听到微笑的博客 这种借助 Windows Su…...

如何使用PyCharm自动化测试

如何使用PyCharm自动化测试 1.打开PyCharm右击文件&#xff0c;点击新建项目 按照如图配置&#xff0c;然后点击创建 2.创建好后&#xff0c;点击文件&#xff0c;然后点击设置 按照如图步骤&#xff0c;查看selenium和webdriver-manager是否存在 3.以上都完成后按照如图创…...

56.评论日记

2025年4月12日22:06:08 小米事故下的众生相_哔哩哔哩_bilibili...

EMI滤波器和ESD保护等效参数汇总

EMI 共模抑制与ESD设计参考用,特别是工业和机器人&#xff0c;伺服器类产品&#xff0c;特别关注&#xff0c;提高产品稳定性 基带接口 通道数 线性小信号等效参数 数字端口时钟频率 备注 Rline Cline 电池反接 1 — 240Pf — 过压和电池反接保护 …...

java -jar与java -cp的区别

java -jar与java -cp 1、情景描述2、情景分析3、两者区别 通常情况下&#xff0c;我们会看到以下两种命令启动的Java程序&#xff1a; java -jar xxx.jar [args] java -cp xxx.jar mainclass [args]这两种用法有什么区别呢&#xff1f; 1、情景描述 1&#xff09;Java打包单个…...

蓝桥杯嵌入式十五届模拟三(串口、双ADC)

一.LED 先配置LED的八个引脚为GPIO_OutPut&#xff0c;锁存器PD2也是&#xff0c;然后都设置为起始高电平&#xff0c;生成代码时还要去解决引脚冲突问题 二.按键 按键配置&#xff0c;由原理图按键所对引脚要GPIO_Input 生成代码&#xff0c;在文件夹中添加code文件夹&#…...

04-算法打卡-数组-二分查找-leetcode(69)-第四天

1 题目地址 69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09;69. x 的平方根 - 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。注意&#xff1a;不允许使用任何内…...

SpringBoot项目:部门管理系统

文章目录 1、工程搭建1.1 创建项目1.2 创建数据库1.3 准备基础代码1.4 准备mapper接口1.5 准备service层1.6 准备controller层2、接口开发2.1 查询部门2.1.1 接口开发1、工程搭建 1.1 创建项目 主要内容: 创建Springboot工程引入web开发起步依赖、mybatis、mysql驱动、lombok…...

MyBatis-Plus 扩展功能

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 逻辑删除一、配置逻辑删除字段方式一&#xff1a;全局配置&#xff08;推荐&#xff09;方式二&#xff1a;实体类注解配置 二、逻辑删除流程三、完整代码示例1. 实…...

service和endpoints是如何关联的?

在Kubernetes中&#xff0c;Service 和 Endpoints 是两个密切关联的对象&#xff0c;它们共同实现了服务发现和负载均衡的功能。以下是它们之间的关联和工作原理&#xff1a; 1. Service 的定义 Service 是一种抽象&#xff0c;定义了一组逻辑上相关的 Pod&#xff0c;以及用…...

MyBatis-plus 快速入门

提示&#xff1a;MyBatis-Plus&#xff08;MP&#xff09;是一个 MyBatis的增强版 文章目录 前言使用MybatisPlus的基本步骤1、引入MybatisPlus依赖代替Mybatis依赖2、定义Mapper接口并继承BaseMapper他是怎么知道哪张表&#xff0c;哪些字段呢 3、实体类注解4、根据需要添加配…...

【PySpark大数据分析概述】03 PySpark大数据分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PySpark大数据分析与应用 ⌋ ⌋ ⌋ PySpark作为Apache Spark的Python API&#xff0c;融合Python易用性与Spark分布式计算能力&#xff0c;专为大规模数据处理设计。支持批处理、流计算、机器学习 (MLlib) 和图计算 (GraphX)&am…...

C# --- IEnumerable 和 IEnumerator

C# --- IEnumerable 和 IEnumerator IEnumerableIEnumeratorIEnumerable 和 IEnumerator 的作用手动实现 IEnumerableIEnumerable vs. IQueryable为什么有了ienumerator还需要ienumerable IEnumerable 在C#中&#xff0c;IEnumerable 是一个核心接口&#xff0c;用于表示一个可…...

Excel VBA 运行时错误1004’:方法‘Open’作用于对象‘Workbooks’时失败 的解决方法

使用Excel编写VBA脚本时出现如下错误&#xff1a; 运行时错误1004’: 方法‘Open’作用于对象‘Workbooks’时失败 我的功能是打开一系列excel文件从中自动复制数据到汇总excel的各个指定的sheet中&#xff0c;来源的excel是从网站上下载的。 出现这个问题后从网上查找各种办…...

03-算法打卡-数组-二分查找-leetcode(34)-第三天

1 题目地址 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09;34. 在排序数组中查找元素的第一个和最后一个位置 - 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置…...

利用python从零实现Byte Pair Encoding(BPE)

喜欢可以到我的主页订阅专栏哟(^U^)ノ~YO 第一章:自然语言处理与分词技术基础 1.1 自然语言处理的核心挑战 自然语言处理(Natural Language Processing, NLP)作为人工智能领域的重要分支,其核心目标是实现计算机对人类语言的理解与生成。在深度学习技术快速发展的今…...

Redis的分布式锁

Redis的分布式锁 一.分布式锁的简介二.分布式锁的实现1.基本实现2.引入过期时间3.引入校验ID4.引入Lua5.引入看门狗(watch dog)6.引入RedLock算法 一.分布式锁的简介 在一个分布式的系统中&#xff0c; 会涉及到多个节点访问一个公共资源的情况&#xff0c;此时就需要通过锁的…...

SpringBoot分布式项目中实现智能邮件提醒系统

一、应用场景与需求分析 在电商、OA、客服等系统中,邮件提醒是用户触达的重要方式。本文针对以下典型需求进行方案设计: 多类型支持:订单超时、服务到期、待办通知等场景动态内容:支持纯文本/HTML/模板引擎内容格式智能重发:24小时未处理自动升级提醒级别高可用性:分布式…...

LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断,适合新手小白研究学习(Matlab完整源码和数据)

LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断&#xff0c;适合新手小白研究学习&#xff08;Matlab完整源码和数据&#xff09; 目录 LSTM-SVM长短期记忆神经网络结合支持向量机组合模型多特征分类预测/故障诊断&#xff0c;适合新手小白研究学习…...

【图像处理基石】什么是抗锯齿(Anti-Aliasing)?

1. 抗锯齿的定义与作用 抗锯齿&#xff08;Anti-Aliasing, AA&#xff09;是一种用于消除数字图像中因采样不足导致的边缘锯齿现象的技术。锯齿&#xff08;Jaggies&#xff09;通常出现在高分辨率信号以低分辨率呈现时&#xff0c;例如3D图形渲染或图像缩放过程中。抗锯齿通过…...

C++曲线数据统一:如何高效插值并处理多条曲线的x值

在数据处理和科学计算中&#xff0c;我们经常会遇到需要对多条曲线进行统一x值处理的情况。例如&#xff0c;在实验数据记录中&#xff0c;不同传感器可能以不同的采样率记录数据&#xff0c;导致曲线的x值不一致。为了后续的分析和可视化&#xff0c;我们需要将这些曲线的x值统…...

训练模型的方式的两种方式:图像描述(Image Captioning)和对比学习(Contrastive Learning)原理及区别

图像描述&#xff08;Image Captioning&#xff09;和对比学习&#xff08;Contrastive Learning&#xff09;都是深度学习中用于训练模型的方式&#xff0c;但它们的目标、原理和实现方法都有很大不同。让我们分别看看它们的原理和区别。 1. 图像描述&#xff08;Image Capti…...

数据结构:哈希表 | C++中的set与map

上回说到&#xff0c;红黑树是提升了动态数据集中频繁插入或删除操作的性能。而哈希表(Hash Table)&#xff0c;则是解决了传统数组或链表查找数据必须要遍历的缺点。 哈希表 哈希表的特点就是能够让数据通过哈希函数存到表中&#xff0c;哈希函数能够将数据处理为表中位置的索…...

【unity游戏开发——Animator动画】Animator动画状态机复用——重写动画控制器 Animator Override Controller

注意&#xff1a;考虑到UGUI的内容比较多&#xff0c;我将UGUI的内容分开&#xff0c;并全部整合放在【unity游戏开发——Animator动画】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、状态机复用是什么&#xff1f;二、实战专栏推荐完结 一、状态机复…...

第九届 蓝桥杯 嵌入式 省赛

一、分析 1. LCD 显示 显示 存储位置、定时时间和当前状态存储位置&#xff1a;5个&#xff0c;来存储定时时间当前状态 定时器停止&#xff0c;Standby设置时间&#xff0c;Setting定时器运行&#xff0c;Runing定时器暂停&#xff0c;Pause 伪代码 LCD 显示 # 显示存储位…...

电流互感器的两相星形接线的建模与仿真

微♥“电击小子程高兴的MATLAB小屋”获取巨额优惠 1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2016Rb&#xff09;软件。建议采用matlab2016 Rb及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 2.仿真模型 3.仿真结果 3.1一次…...

【征程 6】工具链 VP 示例中 Cmakelists 解读

1. 引言 在文章【征程 6】VP 简介与单算子实操中&#xff0c;介绍了 VP 是什么&#xff0c;并以单算子 rotate 为例&#xff0c;介绍了 VP API 使用方法。在【征程 6】工具链 VP 示例中日志打印解读 中介绍了 VP 单算子示例中用到的日志打印的头文件应该怎么写。接下来和大家一…...

制作像素风《饥荒》类游戏的整体蓝图和流程

游戏的制作过程和核心要素拆解成以下几个主要部分&#xff1a; 1. 核心概念与玩法设计 (蓝图构思) 游戏类型: 确定是纯粹的生存、带有冒险元素&#xff0c;还是有其他侧重&#xff1f;&#xff08;比如更强的战斗、建造或剧情&#xff09;核心循环: 玩家主要做什么&#xff1…...

Day22 -php开发01--留言板+知识点(超全局变量 文件包含 数据库操作 第三方插件)

环境要求&#xff1a;php7.0.9 小皮 navicat phpstorm24.1 知识点&#xff1a;会写&#xff08;留言板 留言板后台&#xff09; 超全局变量 三方插件的使用 文件包含 1、开启小皮并利用navicat新建一个数据库 注意&#xff1a;本地的服务mysql关闭后 才可打开小皮。属…...

履带小车+六轴机械臂(1)

基于单片机的可移动抓取机械手 采用的是一个履带底盘和六轴机械臂做的 已经实现的功能有&#xff1a;PS2手柄控制六个轴的舵机转动和控制两个直流减速电机的转动&#xff0c;以此来达到控制移动和抓取的目地&#xff0c;以及用手机APP连接蓝牙模块HC-05也能达到六个轴的舵机转…...

AI:深度学习之循环神经网络(RNN)

🔄 从零入门循环神经网络(RNN):原理详解+代码实战+未来展望 🚀 摘要:在人工智能蓬勃发展的当下,循环神经网络(Recurrent Neural Network, RNN)是处理序列数据的“记忆大师”🧠,正发挥着举足轻重的作用。从自然语言处理中的文本生成、机器翻译,到语音识别、时间…...

03-libVLC的视频播放器:控制(播放/暂停/停止/拖动条/声音)

libvlc_media_player_get_state(m_pMediaPlayer) 功能:获取当前媒体播放器的状态,返回值为libvlc_state_t枚举类型。常见状态值:libvlc_Playing:正在播放libvlc_Paused:已暂停libvlc_Stopped:已停止libvlc_Ended:播放结束libvlc_Error:发生错误注意事项:状态检测是异步…...

Python_仓库使用货拉拉物流运费计算1

仓库地址为广州 物料表里有各SKU的尺寸&#xff0c;长宽高 货拉拉收费明细表 根据订单的SKU的数量、尺寸、重量&#xff0c;去寻找最合适的货拉拉车型&#xff0c;并计算它所需的路费 import pandas as pd# 读取数据 df_111 pd.read_excel(订单明细表.xlsx) df_material …...

CATIA高效工作指南——常规配置篇(一)

一、CATIA无窗口启动优化 原理与实现 通过修改环境变量或启动参数&#xff0c;可禁用启动界面以提升加载速度。添加环境变量CATNOSTARTDOCUMENT1可跳过初始画面 进阶应用&#xff1a; 结合脚本实现静默启动&#xff1a;创建批处理文件&#xff08;.bat&#xff09;包含start …...

【AI提示词】金融信息抽取工程师工作流程

提示说明 专注于从金融行业的文本中提取关键信息&#xff0c;确保准确性和规范性。具备良好的文本处理能力和数据整理经验&#xff0c;能够处理复杂的信息结构。 提示词 # Role&#xff1a;金融信息抽取工程师## Background&#xff1a; 用户希望从金融行业的文本中严格提取…...

8、HTTPD服务--http协议介绍

目录 一、http协议 二、web服务 1、类型 2、cookie、session 三、HTTP协议特性 1、http/0.9 2、http/1.0 3、http/1.1 4、http/2 四、HTTP状态码、请求方法 1、状态码 2、请求方法 一、http协议 应用层协议作用 在客户端、web服务器传递数据 Hyper Text Transfer …...

React useEffect

在发送请求后执行代码 useEffect(副作用函数&#xff0c;依赖项数组) import { useEffect, useState } from "react";const URL http://geek.itheima.net/v1_0/channels function App() {// 创建状态数据const [list,setList] useState([])const [count,setCount] …...

部署Fish-Speech实现声音克隆及文本转语音

FishSpeech 是由Fish Audio团队开发的一款开源文本转语音&#xff08;TTS&#xff09;模型&#xff0c;支持多语言的语音合成和识别。它采用先进的深度学习技术&#xff0c;能够生成自然流畅的语音&#xff0c;并提供高质量的语音转文字功能。FishSpeech 支持声音克隆&#xff…...

Qt之OpenGL中的shader layout

layout一共有两种绑定方法。一种是把设定好的值绑定到shader中、另一种是shader中的layout绑定到代码中。 第一种方法&#xff08;注意&#xff1a;要在link之前绑定同时要把shader代码中的layout设置删掉&#xff09; void sunOpengl::initializeGL() {this->initializeO…...

【问题记录】记录2个安装Centos/Anolis系统卡死在安装包阶段的问题?(硬盘分区?换设备)

背景 问题就不详细记录了&#xff0c;本文记录的是Centos/Anolis安装中卡主的问题。这个问题遇到过几十次了&#xff0c;尝试过各种方法。最近一个偶然因素找到了原因。然后翻看历史上出现这个问题的照片居然是相同的地方卡死。。。 有点意思。特此记录&#xff0c;希望未来遇…...

用纯Qt实现GB28181协议/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲

一、前言 在技术的长河中探索&#xff0c;有些目标一旦确立&#xff0c;便如同璀璨星辰&#xff0c;指引着我们不断前行。早在2014年&#xff0c;我心中就种下了用纯Qt实现GB28181协议的种子&#xff0c;如今回首&#xff0c;一晃十年已逝&#xff0c;好在整体框架和逻辑终于打…...

论文阅读笔记——Multi-Token Attention

MTA 论文 在 Transformer 中计算注意力权重时&#xff0c;仅依赖单个 Q 和 K 的相似度&#xff0c;无法有效捕捉多标记组合信息。&#xff08;对于 A、B 两个词&#xff0c;单标记注意力需要分别计算两个词的注意力分数&#xff0c;再通过后处理定位共同出现的位置或通过多层隐…...