package.json文件解析

news2024/9/21 16:26:52

【图书介绍】《Node.js+MongoDB+Vue.js全栈开发实战》-CSDN博客

《Node.js+MongoDB+Vue.js全栈开发实战(Web前端技术丛书)》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com)

本节主要介绍package.json文件的作用及文件中各个选项的含义。

2.4.1  node_modules目录的问题

虽然目前我们只安装了几个包,但是打开node_modules这个目录,会发现里面包含了gulp-demo项目gulp的所有依赖包,如图2-8所示。

图2-8

目录中存在以下问题:

  1. 目录以及文件过多、过碎,当我们将项目整体复制给别人的时候,传输速度会很慢。
  2. 复杂的模块依赖关系需要被记录,以确保模块的版本和当前的保持一致,否则会导致当前项目运行报错。

要解决上述问题,就需要package.json文件。

2.4.2  package.json文件的作用

package.json包描述文件相当于产品的说明书,它记录了当前项目信息,例如项目名称、版本、作者、GitHub地址、当前项目依赖了哪些第三方模块等。

使用npm init -y命令可以快捷生成package.json文件。其中,init是初始化的意思;-y是yes的意思,表示不填写任何信息,全部采用默认配置。

项目依赖的第三方模块分为项目依赖和开发依赖两种。

1. 项目依赖

在项目的开发阶段和线上运营阶段都需要依赖的第三方包,称为项目依赖。

使用“npm install包名”命令下载的文件默认会被添加到package.json文件的dependencies字段中。

例如:

  "dependencies": {
    "vue": "^3.0.0",
  },

2. 开发依赖

在项目的开发阶段需要依赖而线上运营阶段不需要依赖的第三方包,称为开发依赖。

使用“npm install包名--save-dev”命令将包添加到package.json文件的devDependencies字段中。

例如:

  "devDependencies": {
    "gulp": "^4.0.2"
  }

总结:项目运行必须用到的包应该配置为项目依赖,如果只是开发环境用到(例如压缩、样式转换等)包,则应该配置为开发依赖。项目依赖中只保留必要的包,这样可以减少生产环境项目包的大小。

建议每个项目都有且只有一个package.json文件(存放在项目的根目录)。

2.4.3  package.json文件中各个选项含义

package.json文件就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。

我们以前面gulp-demo项目中的package.json文件为例:

{
  "name": "gulp-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.23.2",
    "gulp": "^4.0.2",
    "gulp-babel": "^8.0.0",
    "gulp-csso": "^4.0.1",
    "gulp-file-include": "^2.3.0",
    "gulp-htmlmin": "^5.0.1",
    "gulp-less": "^5.0.0",
    "gulp-uglify": "^3.0.2"
  },
  "dependencies": {
      
  }
}

各个选项的含义说明如下:

  1. name:项目名称。
  2. version:项目版本号,版本号遵守“大版本.次要版本.小版本”的格式。
  3. description:项目描述。
  4. main:加载的入口文件,require('moduleName')会按照顺序来查找文件,如果前面都找不到模块,最后就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
  5. scripts:指定运行脚本命令的npm命令行缩写,比如test指定了运行npm run test时所要执行的命令。
  6. author:项目作者。
  7. license:许可证类型,例如ISC许可证是一种开放源代码许可证。
  8. devDependencies:指定项目开发所需要的模块。
  9. dependencies:指定项目运行所依赖的模块。

其他属性:

  1. browser:指定该模块供浏览器使用的版本。可以通过浏览器打包工具Browserify知道该打包那个文件。
  2. engines:指明该模块运行的平台,比如Node.js的某个版本或者浏览器。
  3. preferGlobal:布尔类型,表示当用户不将该模块安装为全局模块时(即不用–global参数),要不要显示警告,默认安装为全局模块。
  4. style:指定供浏览器使用时,样式文件所在的位置。可以通过样式文件打包工具parcelify知道样式文件的打包位置。
  5. config:用于添加命令行的环境变量。
  6. bin:用来指定各个内部命令对应的可执行文件的位置。
  7. private:布尔类型,值为true表示npm将拒绝发布。通过它可以防止意外发布私有存储库。

2.4.4  package-lock.json文件的作用

如果使用npm安装包,那么对应会生成package-lock.json文件。如果使用yarn安装包,那么对应生成的是yarn.lock文件。这两个文件都用于记录当前项目所依赖的各个包的版本。

对于package-lock.json文件,其作用如下:

  1. 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题。
  2. 加快下载速度,因为该文件中已经记录了项目所依赖的第三方包的树状结构和包的下载地址,所以重新安装时直接下载即可,不需要做额外的工作。

package-lock.json的主要目的是确保即使是在不同环境中,使用相同的package.json文件也能获得一致的依赖树。这个文件在npm 5被引入,因此如果使用npm 5或更高版本,就会在项目中看到package-lock.json文件,除非明确地禁用了它。有了package-lock.json以后,npm会根据package-lock.json里的内容来处理和安装依赖,而不是根据package.json。因为pacakge-lock.json给每个依赖都标明了版本、获取地址和哈希值,使得每次安装都会出现相同的结果,而不用管我们在什么机器上面安装或什么时候安装。

package-lock.json代码示例如下:

{
  "name": "gulp-demo",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": {
    "ansi-colors": {
      "version": "1.1.0",
      "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-1.1.0.tgz",
      "integrity": "sha1-Y3S03V1HGP884npnGjscrQdxMqk=",
      "dev": true,
      "requires": {
        "ansi-wrap": "0.1.0"
      }
    },
...

2.4.5  yarn.lock的作用

yarn.lock的作用和package-lock.json类似,都是为了锁定唯一版本。官网的描述如下:

“为了跨机器安装得到一致的结果,Yarn需要比你配置在package.json中的依赖列表更多的信息。Yarn需要准确存储每个安装的依赖是哪个版本。

为了做到这样,Yarn使用一个你项目根目录里的yarn.lock文件。这可以媲美其他像Bundler或Cargo这样的包管理器的lockfiles。它类似于npm的npm-shrinkwrap.json,然而他并不是有损的并且它能创建可重现的结果。”

需要注意的是,所有yarn.lock文件应该被提交到版本控制系统。yarn.lock文件是自动生成和自动修改的,我们不应该手动去修改它。

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

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

相关文章

【一个简单的整数问题】

问题 TLE代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int b[N]; void add(int l, int r, int d) {b[r1] - d;b[l] d; } int query(int x) {int retval 0;for(int i 1; i < x; i){retval b[i];}return retval; } int main() {int n, m…

【Kubernetes】持久卷声明 PVC

持久卷声明 PVC 1.持久卷和持久卷声明的区别2.在 Pod 中使用持久卷声明3.storageClass 详解 持久卷声明&#xff08;Persistent Volume Claim&#xff0c;PVC&#xff09;&#xff0c;是用户对 Kubernetes 存储资源的一种请求。 通过使用 持久卷声明&#xff08;PVC&#xff0…

yolo训练策略--使用 Python 和 OpenCV 进行图像亮度增强与批量文件复制

简介 在计算机视觉和深度学习项目中&#xff0c;数据增强是一种常用的技术&#xff0c;通过对原始图像进行多种变换&#xff0c;可以增加数据集的多样性&#xff0c;从而提高模型的泛化能力。本文将介绍如何使用 Python 和 OpenCV 实现图像的亮度增强&#xff0c;并将增强后的…

驱动(RK3588S)第二课时:引导程序和内核

目录 一、引导程序&#xff08;uboot&#xff09;1、uboot介绍2、A 系列通用芯片启动流程3、uboot的配置与使用 二、内核&#xff08;kernel&#xff09;1、内核的介绍2、内核的配置、裁剪和编译 三、其他知识点 一、引导程序&#xff08;uboot&#xff09; 1、uboot介绍 ubo…

PDF转CAD必备工具:四款转换神器对比推荐

随着数字办公的普及&#xff0c;我们常常需要处理不同格式的文档。在工程和设计领域&#xff0c;PDF转CAD的转换工具更是必备之选。本文将为大家介绍四款高效、便捷的PDF转CAD工具&#xff1a; 一、福昕PDF在线转换器 直通车&#xff08;粘贴到浏览器打开&#xff09;&#x…

软件测试 - 性能测试 (概念)(并发数、吞吐量、响应时间、TPS、QPS、基准测试、并发测试、负载测试、压力测试、稳定性测试)

一、性能测试 目标&#xff1a;能够对个人编写的项目进行接口的性能测试。 一般是功能测试完成之后&#xff0c;最后做性能测试。性能测试是一个很大的范围&#xff0c;在学习过程中很难直观感受到性能。 以购物软件为例&#xff1a; 1&#xff09;购物过程中⻚⾯突然⽆法打开…

PCB设计中” 铺铜的方式“导致电焊机设计失败

发现这个问题的背景 在看到网上视频设计一个小电池的点焊机很容易&#xff0c;在一些需要电力的小设计少不了点焊&#xff0c;就想尝试一下。当然其中遇到很多坑&#xff0c;后面会一起总结。这里遇到的一个小坑&#xff0c;但让人有点苦笑不得。 首先&#xff0c;点焊需要大…

【SQL】统一字符格式

目录 语法 需求 示例 分析 代码 语法 substring(column_name, start, length)用于从一个字符串中提取子字符串 column_name&#xff08;或任何字符串表达式&#xff09;&#xff1a;这是要从中提取子字符串的列名或字符串表达式。start&#xff1a;这是子字符串开始的位置…

用Python实现时间序列模型实战——Day 3: 时间序列数据预处理

一、学习内容 1. 时间序列的差分运算 差分运算&#xff1a; 差分运算是时间序列平稳化的一种方法&#xff0c;通过计算相邻时间点的差值来消除序列中的趋势和季节性成分。 一阶差分用于去除线性趋势&#xff0c;公式为&#xff1a; 其中&#xff1a; 是时间 的原始值&…

【网络安全】服务基础第一阶段——第三节:Windows系统管理基础----服务器远程管理与安全权限

服务器远程管理是一种技术&#xff0c;服务器远程管理是指通过远程连接来监控、配置和维护服务器的过程&#xff0c;而无需直接在物理服务器前操作。它允许IT管理员在不同的地点对服务器进行配置、监控和维护&#xff0c;无需物理上接触到服务器本身。这种能力对于管理分布在多…

LLaVA-MoLE:解决多模态大型语言模型指令微调中的数据冲突问题

人工智能咨询培训老师叶梓 转载标明出处 多模态大模型&#xff08;MLLMs&#xff09;通过指令微调&#xff08;instruction finetuning&#xff09;&#xff0c;能够执行各种任务&#xff0c;如理解图表、处理文档和回答基于图像的问题。但是&#xff0c;当从不同领域混合指令…

算法——K-means算法和算法改进

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、什么是K-means算法&#xff1f; K-means算法是一种无监督的聚类算法&#xff0c;用于将一组数据点分为K个簇&#xff08;cluster&#xff09;。其核心目标是将数据点划分到K个不同的簇中&…

CAS单点登录安装文档

CAS单点登录安装文档 目录 1、 下载CAS 2、 下载xmlsectool 3、 安装xmlsectool 4、 打包CAS 5、 部署CAS 6、 访问CAS 1.下载CAS 在CAS官方Github下载&#xff1a;https://codeload.github.com/apereo/cas/zip/v5.3.0 2.下载xmlsectool 在MVNREPOSITORY下载xm…

JavaWeb JavaScript ⑨ 正则表达式

生命的价值在于你能够镇静而又激动的欣赏这过程的美丽与悲壮 —— 24.8.31 一、正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用简单的API对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。 1.语法 var pattnew RegExp(pattern,modi…

【软考】IO软件

目录 1. 说明2. 读硬盘文件3. IO 系统的层次结构与每层的主要功能4. 例题4.1 例题1 1. 说明 1.设备管理软件的设计水平决定了设备管理的效率。2.从事I0 设备管理软件的结构&#xff0c;其基本思想是分层构造&#xff0c;也就是说把设备管理软件组织成为一系列的层次。3.低层与…

【机器学习】任务二:波士顿房价的数据与鸢尾花数据分析及可视化

目录 1.实验知识准备 1.1 NumPy 1.2 Matplotlib 库 1.3 scikit-learn 库&#xff1a; 1.4 TensorFlow 1.5 Keras 2.波士顿房价的数据分析及可视化 2.1波士顿房价的数据分析 2.1.1 步骤一&#xff1a;导入所需的模块和包 2.1.2 步骤二&#xff1a;从 Keras 库中加载波…

Linux驱动开发基础(DS18B20温度模块)

所学来自百问网 目录 1.DS18B20 简介 2.硬件设计 3.软件设计 3.1 存储器介绍 3.2 通信时序 3.2.1 初始化时序 3.2.2 写时序 3.2.3 读时序 3.3 常用命令 4. 示例代码 4.1 驱动代码 4.2 应用代码 4.3 Makefile 4.4 实验效果 1.DS18B20 简介 DS18B20 温度传感器具…

[线程]阻塞队列

文章目录 阻塞队列生产者消费者模型通过BlockingQueue理解阻塞队列自己实现阻塞队列 阻塞队列 我们之前学的队列, 其实是最基础的队列, 实际开发中, 针对队列还有很多种变种 普通队列优先级队列阻塞队列 先进先出, 线程安全, 并且带有阻塞功能 阻塞功能指: 如果队列为空, 尝试…

23种设计模式之模板模式

一.什么是模板模式 ‌‌模板模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;而将一些步骤留给子类实现。‌这种模式允许子类在不改变算法结构的基础上&#xff0c;重新定义算法的某些步骤。模板模式属于行为型设计模式&#xff0c;主要用于处理那些需…

excel透视图、看板案例(超详细)

一、简介 Excel透视图&#xff08;Pivot Table&#xff09; 功能&#xff1a;透视图是一种强大的数据分析工具&#xff0c;用于汇总、分析和展示数据。它允许用户对数据进行重新排列和分类&#xff0c;从而更容易发现数据中的模式和趋势。用途&#xff1a;可以用来生成动态报表…