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

包管理工具与配置文件package.json

1,了解工程化管理核心

1.1 nodejs

理解:

在前端工程化发展中,nodejs的出现让前端开始了工程化,结束了仅静态页和切图的工作。他为前端提供了一个运行环境,让前端彻底变成了一个单独的工程,可以运行、编译、构建打包等。

版本管理:

不同的前端项目可能使用不同的nodejs版本开发,因此nodejs的版本管理,通常使用nvm(https://github.com/nvm-sh/nvm)和n(https://www.npmjs.com/package/n)。

二者区别是n是一个npm包,他必须要在node环境中才能安装运行,而nvm可以在window和mac下使用;同时多窗口使用n,全局的node版本都会跟着改变,而nvm在不同的终端窗口可以保持不同的版本。因此大部分情况下都是使用nvm来进行版本管理。

1.2 npm

理解:

npm(Node Package Manager)是主要用来进行包管理的工具。以前的项目如果用到一个插件,需要直接复制文件夹到另一个项目,但是npm将插件保存到远程仓库registry,在新项目复用的时候,直接通过npm install下载安装到当前项目的node_modules目录下进行引用。他将包的信息等都存到package.json文件中,同时该配置文件也存了一些关于项目命令等其他信息。

淘宝镜像源:

因为npm是从国外服务器下载,因此会有下载慢的问题,因此淘宝团队搭建了一个国内的镜像,每10分钟一同步。而我们开发者就可以设置淘宝镜像源来提高下载速度。

npm config set registry https://registry.npm.taobao.org

1.3 yarn

理解:

npm包管理工具存在很多问题,比如下载慢,版本管理不严格导致每台机器上的依赖库版本补丁不一致,npm嵌套关系较深等。因此会衍生出很多新的包管理工具,例如yarn。

yarn的提出主要是为了解决npm中补丁版本不一致的问题,使用yarn.lock文件固定了安装的版本号,且在安装时采用并行安装的方式,提高了依赖包的安装速度。(而后续npm也模仿他加了package-lock.json这一相同功能)

使用:

1,下载yarn: npm install -g yarn (可以用yarn -v 检测是否安装成功)

      [设置淘宝镜像:yarn config set registry https://registry.npmmirror.com/ ]

2,安装依赖: yarn

3,安装具体依赖包: yarn add 包名

4,删除具体依赖包: yarn remove 包名

5,启动项目: yarn serve(比npm少了一个run)

注意

yarn与npm不要混合使用,二者尽量只选择一个

1.4 pnpm

理解:

占用磁盘空间更小,下载速度更快支持monorepos(解决了前端项目臃肿和分工合作的问题,支持用一个git仓库管理多个子项目,例如Babel项目也在使用),安装简单(npm i -g pnpm),替换npm和yarn的成本低

使用

1,安装pnpm: npm install -g pnpm

     [设置淘宝镜像:pnpm set registry https://registry.npm.taobao.org ]

2,安装依赖: pnpm install

3,安装具体依赖包: pnpm add 包名

4,删除具体依赖包: pnpm remove 包名

5,启动项目: pnpm run serve

1.5 依赖包版本号

版本号理解

每个依赖包的版本号都是1.2.3的形式,对应的意义为主版本号、次版本号、修订版本号。

最优版本理解

默认情况npm install下载的都是最新版本,版本号不是固定的,而是最优版本。最优版本通常在版本号前面多一个 ^ 或者 符号。

符号^ :兼容某个大版本,下载的包主版本不能变,次版本和修订版本可以随意变

符号~: 兼容某个次版本,下载包的主版本和次版本不能变,修订版本可以随意变

示例:

"element-ui": "^2.15.8",
// 版本号可以是2.15.8、2.15.7、2.14.5等等

特点:

最优版本就会导致多人开发会出现多个不同的版本,但是就算使用固定版本锁死版本号,但是无法保证依赖包的依赖包还是最优版本。

2,package.json配置

必备属性:(只有两个)

name - 项目名称

version - 项目版本

描述信息

description - 项目描述

keyword - 关键词

author - 作者

contributors - 贡献者(与作者不同,他是一个数组

homepage - 主页地址

repository - 仓库地址

bugs - 项目bug反馈地址

funding - 资金支持方式和链接

依赖配置:

dependencies - 生产环境依赖(他下面的依赖会跟随npm包被自动下载)

devDependencies - 开发环境依赖(本地开发阶段使用到的,不会被自动下载,例如webpack、eslint、vite、babel、scss-loader等辅助工具包)

    (注:当只开发项目不对外开源时,放在dependencies和devDependencies中是一样的)

peerDependencies - 同版本依赖(简单理解就是依赖包A依赖了B,依赖包C也依赖了B,而将相同的依赖写在同版本依赖里,可以保证共用同一个版本的依赖,且避免重复安装

bundledDependencies - 捆绑依赖(使用较少。参数是一个数组)

engines - 具体环境(node和npm)版本(例如:"engines": { "node": ">=8.10.3 <12.13.0", "npm": ">=6.9.0" })

脚本配置:

scripts - 脚本入口

config - 用来定义scripts运行时的配置参数(例如:"config": { "NODE_ENV": "development" })

文件&目录:

main - 指定加载的入口文件(没提供该属性,则默认是根目录下的index.js)

browser - 定义npm包在browser环境下的入口文件

module(非官方) - 定义npm包ESM规范的入口文件,可以在browser环境和node环境使用

types(非官方) - 定义typescript的类声明文件(.d.ts)的路径

files - 指定哪些包被推送到npm服务中(参数为字符串数组)

bin - 定义在全局安装时可执行的命令(例如构建脚手架{ "bin": "cli.js" })

发布配置:

private - true或false,防止将私有包发到npm仓库

preferGlobal(非官方) - true或false,为true表示建议你的包适合全局安装,不适合作为项目依赖本地安装

publishConfig - 发布时的配置项合集(eg:{ tag: '1.0.0', registry: 'http://xxx', access: 'publick' })

os - 设置npm包在什么系统中使用,在什么系统中禁用(eg:{ "os": ["darwin", "linux"] } // 适用的操作系统     { "os" ["!win32"] } // 禁用的操作系统)

cpu - 和OS配置类似,更准确的限制用户的安装环境(eg:"cpu" ["x64", "AMD64"] // 适用的cpu)

license - 指定软件的开源协议

              MIT - 只要用户在项目副本中包含了版权声明和许可声明,就可以拿代码做任何事情,无需承担任何责任

              Apache - 类似于 MIT ,同时还包含了贡献者向用户提供专利授权相关的条款

              GPL - 修改项目代码的用户再次分发源码或二进制代码时,必须公布他的相关修改

第三方配置(非官方):

typings - 与main类似,指定typescript的入口文件

eslintConfig - eslint的配置内容,更推荐配置在.eslintrc文件中

babel - 指定Babel的配置内容,更推荐配置在.babelrc文件中

unpkg - 基于CDN的前端包托管服务,用于在浏览器中直接引用和加载 npm 上发布的包

browserslist - 告知支持哪些浏览器及版本(eg:"browserslist": [ "not ie < 8", "last 2 versions", "> 1%" ])

3,package.json中的命令

npm run xx实际是运行scripts中配置的命令。

多个命令并行顺序执行,使用符号&

"scripts": {"start": "指令一 & 指令二 & ...",
},

多个命令串行前面的成功才会执行后面),使用符号&&

"script": {"start": "指令一 && 指令二 && ...",
},

4,package-lock.json文件

概念:

之前说package.json某个依赖可能不是具体的版本,而package-lock.json则固定了每个依赖的具体版本,和每个包之间的叠层关系。他会在npm install的时候自动生成

node_modules依赖包的主要组成部分

version - 依赖包版本号

resolved - 依赖包下载地址

intergrity - 表明完整性的hash值

dev - 该模块是否为顶级模块的依赖,或者是一个的传递依赖关系

dependencices - 依赖包的依赖包

requires - 依赖包所需要的所有依赖项

engines - 具体环境,同package.json一致

示例:

"node_modules/@achrinza/node-ipc": {"version": "9.2.2","resolved": "https://registry.npmmirror.com/xxc-9.2.2.tgz","integrity": "sha512-b90U39dx0cU......4ApNXnE3+Tuo8xxxxx==","dev": true,"dependencies": {"@node-ipc/js-queue": "2.0.3","event-pubsub": "4.3.0","js-message": "1.0.7"},"engines": {"node": "8 || 10 || 12 || 14 || 16 || 17"}
},

相关文章:

包管理工具与配置文件package.json

1&#xff0c;了解工程化管理核心 1.1 nodejs 理解&#xff1a; 在前端工程化发展中&#xff0c;nodejs的出现让前端开始了工程化&#xff0c;结束了仅静态页和切图的工作。他为前端提供了一个运行环境&#xff0c;让前端彻底变成了一个单独的工程&#xff0c;可以运行、编译…...

uni-app:解决异步请求返回值问题

可以使用 Promise 或者回调函数来处理异步请求的返回值。 方法一&#xff1a; Promise处理异步请求的返回值 使用 Promise 可以将异步请求的结果通过 resolve 和 reject 返回&#xff0c;然后通过 .then() 方法获取成功的结果&#xff0c;通过 .catch() 方法获取错误信息。 …...

<多线程章节七>wait() 和 notify()

&#x1f490;专栏导读 本篇文章收录于多线程&#xff0c;也欢迎翻阅博主的其他文章&#xff0c;可能也会让你有不一样的收获&#x1f604; &#x1f342;JavaSE &#x1f337;多线程 &#x1f33c;数据结构 文章目录 &#x1f490;专栏导读&#x1f490;wait()&#x1f490;no…...

竹云产品入选《2023年度上海市网络安全产业创新攻关成果目录》

为推进网络安全产业发展&#xff0c;建设网络安全产业创新高地&#xff0c;上海市经济和信息化委员会于10月24日正式发布《2023年度上海市网络安全产业创新攻关成果目录》&#xff0c;共评选出16项创新成果&#xff0c;其中包括基础技术创新8项、应用技术创新4项、服务业态创新…...

客户端负载均衡策略:loadBalancer,ribbon

客户端负载均衡是指在分布式系统中&#xff0c;客户端通过某种策略将请求分发到多个服务提供者实例上&#xff0c;以达到负载均衡和提高系统的可用性和性能。 在 Java 生态系统中&#xff0c;Ribbon 是一个常用的客户端负载均衡框架&#xff0c;它是 Netflix 开源的一部分&…...

canvas基础3 -- 交互

点击交互 使用 isPointInPath(x, y) 判断鼠标点击位置在不在图形内 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…...

Flutter——最详细(Scaffold)使用教程

Scaffold简介 相当于界面的主体&#xff08;类似于安卓最外层PhoneWindow&#xff09;&#xff0c;组件的展示都必须依附于它。 使用场景&#xff1a; 每一个界面都是脚手架&#xff0c;通过它来进行架构实现&#xff0c;优美的布局效果。 属性作用appBar顶部的标题栏body显示整…...

C语言编写图形化界面-创建按钮-为其指定样式

文章目录 前置章节指定窗口样式给按钮加边框扁平化按钮复选框样式按钮自动复选框 单选按钮三态按钮自动三态按钮 默认按钮样式&#xff08;对话框Enter键&#xff09; 设置按钮位置和大小封装函数 前置章节 开始之前&#xff0c;需要学习以下章节&#xff1a; 创建窗口 窗口过…...

C++并发与多线程(7) | 创建多个线程时数据共享的问题

一、创建和等待多个线程 借助vector存放多个线程thread对象,借助vector和它的迭代器实现创建和运行多个线程,代码如下: #include <iostream> #include <thread> #include <vector> using namespace std;void myprint(int inum) {cout << "mypr…...

进程间通信(匿名管道、命名管道、消息队列、共享内存、信号量、信号、Socket)

文章目录 一、什么是进程间通信二、管道1.匿名管道(pipe)a).创建匿名管道b).管道的读写规则c).匿名管道的特点 2.有名管道(FIFO)a).创建命名管道b).命名管道的特点c).基于命名管道的进程间通信&#xff08;服务端/客户端&#xff09; 三、消息队列四、共享内存1.什么是共享内存…...

浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍

安科瑞虞佳豪 车桩比降低是完善新能源汽车行业配套的一大重要趋势&#xff0c;目前各国政府都在努力推进政策&#xff0c;通过税收减免、建设补贴等措施提升充电桩建设速度&#xff0c;以满足新能源汽车需求。 近年来&#xff0c;在需求和技术的驱动下&#xff0c;充电桩的平…...

Postgresql在jdbc处理bit字段的解决方案

问题&#xff1a; bit如果长度为1&#xff0c;则会默认为布尔型&#xff08;1-true 0-false&#xff09;&#xff1b; bit如果长度大于1&#xff0c;则会默认为bit类型&#xff0c;但是代码中以前常用的两种set方式&#xff0c;会报错 第一种方式&#xff1a; ps.setObject(i1,…...

ESMapping字段

在 Elasticsearch 中&#xff0c;字段&#xff08;field&#xff09;是指用于表示数据的最小单元。每个文档&#xff08;document&#xff09;都由一个或多个字段组成&#xff0c;字段存储了文档的不同属性或数据。 字段可以包含不同的数据类型&#xff0c;如文本、数字、日期…...

基于LDA的隐式标签协同过滤推荐算法_文勇军

, 王全民等人[14]提出了一种交替奇异值分解算法 (ASVD),即结合协同过滤和隐语义分析的混合推荐 算法。唐泽坤等人[15]融合聚类算法和协同过滤推荐 算法,取得了一定效果。高娜等人[16⁃19]将标签因子 和协同过滤推荐算法结合研究缓解了数据稀疏问题,但这…...

在线设计数据库表用Itbuilder,极简易用真香!!!

“如果您想要一个具有快速搜索运行的高性能数据库&#xff0c;那么数据库设计是必不可少的&#xff0c;花时间设计数据库将帮助您避免效率低下和高冗余等问题”。 在线数据库设计软件itbuilder&#xff0c;界面清爽漂亮&#xff0c;功能简洁&#xff0c;没有多余设置很容易上手…...

onclick事件的用法

onclick 事件是一种在网页开发中用来处理用户点击操作的事件。它通常用于 HTML 元素&#xff08;如按钮、链接、图像等&#xff09;&#xff0c;以便在用户单击该元素时触发 JavaScript 函数或执行一些特定的操作。以下是 onclick 事件的用法&#xff1a; HTML 元素上的 onclic…...

二叉排序树

二叉排序树定义及性质 二叉排序树(Binary Sort Tre)或者是一棵空树&#xff0c;或者是具有如下性质的二叉树&#xff1a; (1) 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; (2) 若它的右子树不空&#xff0c;则右子树上所有结点的值均…...

探秘Spring的设计精髓,深入解析架构原理

序员与平庸的程序员之间的区别&#xff0c;是在于认为自己的代码重要还是数据结构更加重要。平庸的程序员眼里只有代码&#xff0c;优秀的程序员则关注数据结构及之前的关系。” 1、spring的设计理念 spring提供了一个轻量级的开发框架&#xff0c;抽象了实际开发中的很多共…...

Python Wordcloud报错:Only supported for TrueType fonts,多种解决方案

Python Wordcloud报错&#xff1a;Only supported for TrueType fonts&#xff0c;多种解决方案。 报错内容如下&#xff1a; 2023-10-26T09:35:41.190459839Z Traceback (most recent call last): 2023-10-26T09:35:41.190502589Z File “lib/task/compute.py”, line 621, i…...

为虚拟网络提供敏捷负载均衡:Everoute LB 特性解读

为了保证应用系统的可用性&#xff0c;同时避免并发访问导致后端服务器出现性能瓶颈&#xff0c;不少用户都通过负载均衡技术优化流量分发。随着虚拟化平台下用户业务规模的持续扩大&#xff0c;虚拟化网络的数据访问量也不断增加&#xff0c;而传统负载均衡通常通过硬件负载均…...

Jmeter 接口测试,参数值为列表,如何参数化?

最近在我的教学过程中&#xff0c;我的一个学生问了我一个问题&#xff0c;他们公司的一个接口参数值是列表&#xff0c;列表中值的数量有多有少&#xff0c;问我在 jmeter 中如何让这个参数的值进行参数化&#xff1f; 看到这种问题&#xff0c;你的第一反应是什么&#xff1f…...

DeepinV20实现使用CapsLock键切换输入法

概览 起因参考资料解决问题1. 删除CapsLock键映射关系2. 新建CapsLock键映射关系3. 建立配置文件4. **注销用户或者重启电脑**5. 修改切换输入法快捷键6. 测试输入 起因 看同事的MacBook可以使用CapsLock键切换输入法&#xff0c;而我作为Shift党CapsLock键几乎不使用&#xf…...

基于springboot实现校友社交平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校友社交平台管理系统演示 摘要 校友社交系统提供给用户一个校友社交信息管理的网站&#xff0c;最新的校友社交信息让用户及时了解校友社交动向,完成校友社交的同时,还能通过论坛中心进行互动更方便。本系统采用了B/S体系的结构&#xff0c;使用了java技…...

WordPress主题模板 大前端D8 5.1版本完整开源版源码简洁大气多功能配置

源码测评&#xff1a;该模板官方已更新至5.2&#xff0c;但是这个5.1也是非常好用的&#xff0c;经测试所有页面均完好&#xff0c;推荐下载使用。 模板简介&#xff1a; 大前端D8 主题是一款非常牛逼的WordPress博客主题,响应式,功能齐全,支持手机,电脑,平板,非常适合做博客站…...

如何在Postman中使用静态HTTP

首先&#xff0c;打开 Postman 软件。在 Postman 的菜单栏中&#xff0c;点击 “Preferences”&#xff08;偏好设置&#xff09;。 亲身经验&#xff1a;我自己尝试了这个方法&#xff0c;发现它非常适用于需要使用HTTP的场景。 数据和引证&#xff1a;根据 Postman 官方文档…...

vscode 提升Vue开发效率的必备插件与工具

1&#xff0c;Vetur&#xff1a;提供了Vue语法高亮、智能提示、代码片段、错误检查和格式化等功能&#xff0c;是Vue开发中必不可少的插件。 2&#xff0c;ESLint&#xff1a;用于检查和修复JavaScript和Vue代码中的语法错误和潜在问题&#xff0c;提高代码质量。 3&#xff…...

mysql/java/springboot/javaweb请假系统,分为学生/辅导员/超级管理员

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 系统分为 学生/辅导员/超级管理员 学生 辅导员 超级管理员...

Android11系统桌面隐藏指定APP图标

做项目时有时会遇到这样的需求&#xff0c;客户要求隐藏Launcher3桌面的某个app图标&#xff0c;但是又不能删除去掉这个app&#xff0c;具体修改如下&#xff1a; diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTa…...

WEB使用百度地图展示某地地址

第一步 进入百度地图开发平台 百度地图开放平台 | 百度地图API SDK | 地图开发 第二步注册 获取AK秘钥&#xff0c;点击【创建应用】进入AK申请页面&#xff0c;填写应用名称&#xff0c;务必选择AK类型为“浏览器端”&#xff0c;JS API只支持浏览器端AK进行请求与访问 下面…...

22年上半年下午题

第一大题题目 第一大题解答 第一小问 看加工交互和说明来得出实体的名字。如果不太确定&#xff0c;可以多去看几条数据流来确认答案。仔细一点&#xff0c;这分稳啦。 第二小问 需要对应加工结合说明得出数据存储的名称。 一般可以在后面加上表字或者加上信息表。自拟&…...