十三、前端包管理工具详解

news2025/2/4 1:13:21

 一、代码共享方案

我们已经学习了在JavaScript中可以通过模块化的方式将代码划分成一个个小的结构:

在以后的开发中我们就可以通过模块化的方式来封装自己的代码,并且封装成一个工具;

这个工具我们可以让同事通过导入的方式来使用,甚至你可以分享给世界各地的程序员来使用;

那如果我们分享给世界上所有的程序员使用,有哪些方式呢?

二、包管理工具npm

包管理工具npm:

  • Node Package Manage,也就是Node包管理器;
  • 但是目前已经不仅仅是Node包管理器了,在前端项目中我们也在使用它来管理依赖的包;
  • 比如vue、vue-router、vuex、express、koa、react、react-dom、axios、babel、webpack等等;

如何下载和安装npm工具呢?

  • npm属于node的一个管理工具,所以我们需要先安装Node;
  • node管理工具:https//nodejs.org/en/,安装Node的过程会自动安装npm工具; 

npm管理的包可以在哪里查看、搜索呢?

  • https://www.npmjs.org/
  • 这是我们安装相关的npm包的官网; 

npm管理的包存放在哪里呢?

  • 我们发布自己的包其实是发布到registry上面的;
  • 当我们安装一个包时其实是从register上面下载的包; 

npm下载的包存放在哪里?

  • 通过npm install xxx下载包,会自动生成一个node_modules文件夹,该目录下面会有一个dayjs文件。
  •  node_modules里面的dayjs目录下,有个package.json,里面有个配置 "main": "dayjs.min.js",此时如果我们想要导入dayjs的话,也就是导出 "dayjs.min.js"。

三、npm的配置文件

那么对于一个项目来说,我们如何使用npm来管理这么多包呢?

  • 事实上,我们每一个项目都会有一个对应的配置文件,无论是前端项目(Vue、React)还是后端项目(Node);
  • 这个配置文件会记录着你项目的名称、版本号、项目描述等;
  • 也会记录着你项目所依赖的其他库的信息和依赖库的版本号;  

 这个配置文件就是package.json

那么这个配置文件如何得到呢?

  • 方式一:手动从零创建项目,npm init -y
  • 方式二:通过脚手架创建项目,脚手架会帮助我们生成package.json,并且里面有相关的配置。

四、常见的配置文件

五、常见的属性

必须填写的属性:name、 version

  • name是项目的名称;
  • version是当前项目的版本号;
  • description是描述信息,很多时候是作为项目的基本描述;
  • author是作者相关信息(发布时用到);
  • license是开源协议(发布时用到);

private属性: 

  • private属性记录当前的项目是否是私有的;
  • 当值为true时,npm是不可能发布它的,这是防止私有项目或模块发布出去的方式;

main属性:

设置程序的入口。

  • 比如我们使用axios模块 const axios = require("axios");
  • 如果有main属性,实际上是找到对应的main属性查找文件的;

scripts属性 :

  • scripts属性用于配置一些脚本命令,以键值对的形式存在;
  • 配置后我们可以通过npm run命令的key来执行这个命令;
  • npm start和npm run start的区别是什么?它们是等价的;对于常用的 start、 test、stop、restart可以省略掉run直接通过 npm start等方式运行;自定义的key不能省略run哈。

dependencies属性

  •  dependencies属性是指定无论开发环境还是生成环境都需要依赖的包

  • 通常是我们项目实际开发用到的一些库模块vue、vuex、vue-router、react、react-dom、axios等等;

  • 与之对应的是devDependencies;

  •  用法:平常我们在把自己的代码发给其他的同事的时候,不会把node_module这个文件打包发给同事,因为这个文件包太大了,那同事拿到这个项目之后没有这些依赖咋办。在package.json里面有个dependencies,里面有我们安装的依赖包,然后在命令行直接npm install 就行,后面什么都不跟,就会默认下载dependencies里面标明的包。是不是很方便。

devDependencies属性

  • 一些包在生产环境是不需要的,比如webpack、babel等; 

  • 这个时候我们会通过 npm install webpack --save-dev,将它安装到devDependencies属性中;

peerDependencies属性

  • 还有一种项目依赖关系是对等依赖,也就是你依赖的一个包,它必须是以另外一个宿主包为前提的;
  • 比如element-plus是依赖于vue3的,ant design是依赖于react、react-dom;

注意:

  • 如果开发环境和生产环境都会依赖某个包的话比如说是axios,那我们该去怎么安装呢?

    npm install axios --save ,  --save可以省略

  • 那如果我们只是在开发环境需要用到的库,该去怎么安装呢?举个例子我们假如需要安装babel(什么是babel,babel是对我们代码进行转换的,所以生产环境不需要用到babel),
    npm install babel --save-dev  或者这么写 npm install babel -D

六、依赖的版本管理

我们会发现安装的依赖版本出现:^2.0.3或~2.0.3,这是什么意思呢?

npm的包通常需要遵从semver版本规范:

 semver:​语义化版本 2.0.0 | Semantic Versioning

 npm semver:​https://docs.npmjs.com/misc/semver

semver版本规范是X.Y.Z:

 X主版本号(major):当你做了不兼容的 API 修改(可能不兼容之前的版本);

 Y次版本号(minor):当你做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本);

 Z修订号(patch):当你做了向下兼容的问题修正(没有新功能,修复了之前版本的bug);

我们这里解释一下 ^和~的区别:

 x.y.z:表示一个明确的版本号;

 ^x.y.z:表示x是保持不变的,y和z永远安装最新的版本;

 ~x.y.z:表示x和y保持不变的,z永远安装最新的版本;

engines属性

 engines属性用于指定Node和NPM的版本号;

 在安装的过程中,会先检查对应的引擎版本,如果不符合就会报错;

 事实上也可以指定所在的操作系统 "os" : [ "darwin", "linux" ],只是很少用到;

browserslist属性

 用于配置打包后的JavaScript浏览器的兼容情况,参考;

 否则我们需要手动的添加polyfills来让支持某些语法;

 也就是说它是为webpack等打包工具服务的一个属性(这里不是详细讲解webpack等工具的工作原理,所以不再给出详情);

七、npm install 命令

安装npm包分两种情况:

 全局安装(global install): npm install webpack -g;

 项目(局部)安装(local install): npm install webpack

全局安装

 全局安装是直接将某个包安装到全局:

 比如全局安装yarn:

但是很多人对全局安装有一些误会:

 通常使用npm全局安装的包都是一些工具包:yarn、webpack等;

 并不是类似于 axios、express、koa等库文件;

 所以全局安装了之后并不能让我们在所有的项目中使用 axios等库;

(1)项目安装

项目安装会在当前目录下生成一个 node_modules 文件夹,我们之前讲解require查找顺序时有讲解过这个包在什么情况下被 查找;

局部安装分为开发时依赖和生产时依赖:

# 默认安装开发和生产依赖

npm install axios

npm i axios

# 开发依赖

npm install webpack --save-dev

npm install webpack -D

npm i webpack –D

# 根据package.json中的依赖包

npm install

(2)npm install 原理

 

(3)package-lock.json

 

 (4)npm其他命令

八、yarn工具

 npm install yarn -g  下载yarn

yarn --version     查看yarn版本号

yarn init  或者 yarn init -y 生成package.json文件

安装包怎么安装?yarn add axios dayjs

yarn怎么配脚本?其实跟npm差不多

 

九、cnpm工具

如果我们不设置npm的镜像,怕以后淘宝镜像有问题了不能下载了,后面还得重新设置npm的镜像,那这个时候我们就可以使用cnpm,用之前先安装一下。

npm install cnpm -g    全局安装

npm install -g cnpm --registry=https://registry.npm.taobao.org   安装的时候去改变镜像地址
cnpm config set registry=https://registry.npm.taobao.org    安装好了以后去改变镜像地址

这个时候npm所对应的仓库就是官方仓库,cnpm所对应的仓库就是你配的淘宝镜像服务器。

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

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

相关文章

jetson系列开发板生成.engine部署

jetson系列开发板 生成engine 1. 下载 tensorrtx 至 NX git clone -b yolov5-v5.0 https://github.com/wang-xinyu/tensorrtx.git2. 修改 yololayer.h 中的参数 labels.txt 中有几类就将 CLASS_NUM 修改为几。 static constexpr int CLASS_NUM 80; 3. 编译 tensorrtx/yolov…

OLED拼接屏出现坏点怎么办?专家提供的修复方法与建议

OLED拼接屏作为一种高级显示技术,广泛应用于商业展示、会议室和监控中心等场所。 然而,由于制造过程中的缺陷或长时间使用导致的原因,OLED拼接屏可能出现屏幕坏点问题。本文将详细介绍OLED拼接屏屏幕坏点的修复方法与注意事项,帮…

高效编程:如何优雅地判断数组中所有对象的值不为空?

前言 在前端开发中,判断数组中所有对象的值是否都不为空是一个常见的任务。这个任务可能涉及到多个对象和多个属性,因此需要一种简洁而高效的方法来处理。本文将介绍三种不同的方法,帮助你轻松应对这个问题。 方法一:使用 every()…

原生js实现将图片内容复制到剪贴板

核心代码 /*复制图片*/ copyImg(dom) {/* 警告:dom不能是img标签,建议用DIV标签包裹img标签,否者会报错!不支持复制背景图! */dom.style.userSelect auto;let selection getSelection(), range document.createRan…

【AT89C52单片机项目】数字密码锁设计

实验目的 使用单片机设计数字密码锁。 实验仪器 一套STC89C52RC开发板套件,包括STC89C52RC开发板,以及USB烧录线。 设计要求 1、有设置密码、开锁工作模式; 2、可以每次都设置密码,也可以设置一次密码多次使用。 实验原理 …

JS加密之JS基础大考验

JS加密之JS基础大考验 工欲利其器 必先善其事 JavaScript(简称JS)是一种高级、动态、弱类型的编程语言,主要用于前端网页开发,但也可用于后端服务器开发(通过Node.js)。下面是JavaScript的一些特点&#…

windows 安装Vcenter6.7避坑指南

1、推荐windows server 2016。第一次选择windows 2019会出现很多错误 2、内存要求:8G以上 3、如果安装了VMtools,则需要把VCC全部卸载了(控制面板-->卸载程序)

【Linux初阶】基础IO - 软硬链接 | 初识、理解、应用 文件acm时间

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:初识软硬链接,软硬链接的区别,理解软硬链接,软硬链接的应用,文…

Access简单应用

不说废话,直入正题. 关于Access的用法 一开始大家想用添加数据快速生成sql语句,其实在这里 java链接Access数据库需要ODBC连接池 机器jar包 ODBC连接池在 首次添加需要配置如上图所示,jar包链接在下面,直接放到项目下即可 UCanAccess - Browse Files at SourceForge.net下载…

前端学习记录~2023.7.13~CSS杂记 Day6

前言一、基本文字和字体样式1、CSS 中的文字样式涉及什么2、字体(1)颜色(2)字体种类a. 网络安全字体b. 默认字体c. 字体栈 (3)字体大小(4)字体样式(5)字体粗细…

基于SpringBoot+vue的交流互动系统设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

C语言strcmp()函数学习

strcmp函数是string compare(字符串比较)的缩写&#xff0c;用于比较两个字符串并根据比较结果返回整数&#xff1b; strcmp(str1,str2)&#xff1b; 若str1str2&#xff0c;则返回零&#xff1b;若str1<str2&#xff0c;则返回负数&#xff1b;若str1>str2&#xff0c;则…

尚硅谷--Vue从入门到精通

尚硅谷–Vue从入门到精通 第1章&#xff1a;Vue核心 1.1 Vue简介 1.1.1 Vue是什么&#xff1f; 一套用于构建用户界面的渐进式JS框架。 1.1.2 谁开发的&#xff1f; ——尤雨溪。 2015-10-27 正式发布 Vue1.0.0 Evangelion&#xff08;新世纪福音战士&#xff09;2016-1…

【PythonBA】商业分析:Business Analytics 的理解

猛戳订阅&#xff01; &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4dc; 本章目录&#xff1a; Ⅰ. BA 的基础概念 0x00 什么是商业分析&#xff08;Business Analytics&#xff09; 0x01 Explain 和 Predict 0x02 如何去进行分析&#xff1f; 0x03 Python 数据分…

Flutter加载Html

Flutter_Fai_Webview 插件可实现的功能&#xff1a; 同时适配于 Android Ios 两个平台通过 url 来加载渲染一个Html 页面加载 Html 文本数据 如 <html> .... </html>等加载 Html 标签数据 如 <p> ... </p>实现 WebView 加载完成后&#xff0c;自动测量…

【报错】Failed to determine a suitable driver class

文章目录 是否需要mybatis依赖&#xff1a;不需要排除resources未编译 报错信息 *************************** APPLICATION FAILED TO START ***************************Description:Failed to configure a DataSource: url attribute is not specified and no embedded datas…

Python实现HBA混合蝙蝠智能算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法&#xff0c;是一种搜索全局最优解的有效方法…

【2023江西省研究生数学建模竞赛】第三题 植物的多样性 48页论文及Python代码

【2023江西省研究生数学建模竞赛】第三题 植物的多样性 48页论文及Python代码 相关链接 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码 【江西省研究生数学建模竞赛】第一题 蒸汽发生器倒U型管内液体流动 70页论文及MATLAB代码 【2…

IntelliJ IDEA 2023.2 新版本即将发布,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本&#xff0c;官方在对用户体验不断优化的同时&#xff0c;也新增了一些不错的功能&#xff0c;尤其是人工智能助手补充&#xff0c;AI Assistant&#xff0c;相信在后续IDEA使用中&#xff0c;会对开发者工作效率带来不错的提升。 以下是…

亚信科技 AntDB 数据库与星辰天合全产品体系完成兼容互认

近日&#xff0c;亚信科技 AntDB 数据库与星辰天合全产品体系完成兼容互认。经过双方团队的严格测试&#xff0c;AntDB 数据库与天合翔宇分布式存储系统、统一数据平台 XEDP、超融合平台 XHERE 等产品完全兼容&#xff0c;整体运行稳定高效。 双方产品的兼容互认完成&#xff…