软件包管理|npm【前端工具链】

news2024/9/20 9:28:07

项目中的依赖

依赖是指可能由他人编写的第三方软件,理想情况下能够为你解决单一的问题。
一个 Web 项目可以有任意数量的依赖,从无到多,并且你的依赖里可以包含了你没有明确安装的子依赖(依赖的依赖)。

  • 项目依赖可以是整个 JavaScript 库或框架——例如 React 或者 Vue
  • 也可以是非常小的工具库,比如我们的人类易读日期库
  • 它也可以是一个命令行工具,例如我们之前文章中提到的 Prettier 或 ESLint

如果你发现一个更好的工具来代替当前工具,或者你想更新依赖的新版本,会发生什么?
对于只有几个依赖的项目来说来说,这并不痛苦,但对于具有许多依赖项的大型项目来说,这种事情可能会变得非常具有挑战性。这就需要用到 npm 这样的软件包管理器

软件包管理器

image.png
软件包管理器(Package Manager)是一个用于管理软件包(也就是依赖)的工具,主要负责自动化软件安装、更新、配置和删除等任务。它在软件开发和系统管理中起着重要作用。软件包管理器的作用包括:

  • 自动化安装和更新:软件包管理器可以自动处理软件包的下载、安装和更新,确保软件的版本和依赖关系。
  • 依赖管理:软件包管理器会自动处理依赖关系,确保所有必要的组件都被正确安装。并且可以处理理重复的依赖项。
  • 版本控制:软件包管理器可以管理不同版本的软件包,允许用户轻松地升级或回退到特定版本。
  • 安全性:软件包管理器通常会从受信任的源中下载软件包,并进行校验,确保下载的软件包没有被篡改。
  • 系统一致性:通过软件包管理器安装软件,可以确保系统中的软件包来源和安装方式的一致性,便于管理和维护。
  • 简化配置:有些软件包管理器提供工具来自动配置软件,使用户不需要手动调整配置文件。

常见的软件包管理器包括:

  • pip:用于Python的包管理工具。
  • apt(Advanced Package Tool):用于Debian及其衍生发行版(如Ubuntu)。
  • npm(Node Package Manager):用于Node.js生态。

两种安装方式

在使用包管理工具(如 npm)时,通常有两种安装模式:全局安装和项目安装。了解这两种安装模式的区别及其适用场景非常重要。
全局安装 是将包或工具安装在系统的全局环境中,使其可以在任何地方使用。这种安装方式通常用于命令行工具或需要在多个项目中使用的工具。

  • 安装位置:系统全局环境。
  • 适用工具:命令行工具、需要在多个项目中使用的工具。
    • typescripteslint 等。
  • 优点: 全局安装的包在系统中只安装一次,可以节省磁盘空间和安装时间,特别是对一些大型工具包。
  • 缺点: 全局安装的依赖不包含在项目的依赖列表中,其他开发者在克隆项目后无法自动安装这些全局依赖,影响项目的可移植性。 项目对全局环境有依赖,一旦全局环境发生变化(例如包版本更新),可能会导致项目无法正常运行。

项目安装 是将包或工具安装在特定项目的目录中,使其只对该项目有效。这种安装方式通常用于项目的依赖库,确保项目的环境独立。

  • 安装位置: 包安装在项目的 node_modules 文件夹中,只能在该项目中使用 。
  • 适用工具: 适用于项目的依赖,确保项目的可移植性和独立性。 。
  • 优点: 项目之间的依赖是隔离的,一个项目的依赖不会影响到另一个项目,确保各项目环境的一致性和稳定性。
  • 缺点: 不同项目如果使用相同的依赖,每个项目都会单独安装一份,可能会占用更多的磁盘空间。 并且不同项目如果使用相同的依赖,每个项目都会单独安装一份,可能会占用更多的磁盘空间。

软件包仓库

软件包仓库是存储和分发软件包的平台。
为了使软件包管理器工作,它需要知道从哪里安装软件包,这是通过软件包仓库实现的。

npm(Node Package Manager)
  • npm 作为一个软件包管理器,同时也是 JavaScript 软件包最常用的软件包仓库。
  • 网址: npmjs.com

npm 不是唯一的选择。你可以管理自己的软件包仓库——例如 Microsoft Azure 等产品允许你创建到 npm 仓库的代理,GitHub 也提供软件包仓库服务。
其他用途的软件仓库:

  • PyPI 是 Python 生态系统中的主要包仓库,存储和分发 Python 包。 网址: pypi.org
  • Maven Central 是 Java 和 JVM 生态系统中的主要包仓库,适用于 Maven、Gradle 和其他构建工具。 网址: search.maven.org
  • ····

使用npm

使用 npm(Node Package Manager)是管理 JavaScript 和 Node.js 项目依赖的常用方法。以下是一些常见的 npm 使用方法和命令,帮助你更好地管理项目依赖。

安装 npm

首先,确保你已经安装了 Node.js。npm 通常随 Node.js 一起安装。你可以通过以下命令检查是否已经安装:

npm -v

如果没有安装,可以从 Node.js 官方网站 下载并安装 Node.js。

初始化项目

在一个新的或现有的项目目录中,你可以使用以下命令初始化一个新的 npm 项目:

npm init

这个命令会引导你创建一个 package.json 文件,其中包含项目的基本信息和依赖项。你也可以使用 -y 标志自动生成默认配置:

npm init -y

安装包

本地安装

本地安装会将包安装到当前项目的 node_modules 文件夹中,并将其添加到 package.json 文件的 dependencies 部分:

npm install <package-name>

你也可以一次安装多个包:

npm install <package-name1> <package-name2>
全局安装

全局安装会将包安装到系统的全局目录中,使其在系统中的任何地方都可以使用。通常用于命令行工具:

npm install -g <package-name>

移除包

本地移除

从当前项目中移除一个包并更新 package.json 文件:

npm uninstall <package-name>
全局移除

从全局环境中移除一个包:

npm uninstall -g <package-name>

更新包

本地更新

更新本地安装的包到最新版本,并更新 package.json 文件:

npm update <package-name>
全局更新

更新全局安装的包到最新版本:

npm update -g <package-name>

查看包信息

本地查看

查看本地安装的包信息:

npm list

查看特定包的信息:

npm list <package-name>
全局查看

查看全局安装的包信息:

npm list -g --depth=0

运行脚本

package.json 文件中,你可以定义脚本来简化常用的任务。例如,启动一个 Node.js 服务器:

"scripts": {
  "start": "node index.js"
}

你可以使用以下命令运行这个脚本:

npm run start

安全性

为了确保你使用的包没有已知的安全漏洞,可以使用 npm audit 命令来检查项目依赖中的安全问题:

npm audit

如果发现问题,可以使用以下命令修复:

npm audit fix

发布包

如果你想将自己的包发布到 npm 仓库,可以使用以下命令:

npm publish

在此之前,请确保你已经登录 npm 账号:

npm login

pnpm介绍

image.png
pnpm 全称 performant npm,意思为 高性能的 npm。pnpm 由 npm/yarn 衍生而来,解决了 npm/yarn 内部潜在的 bug,极大的优化了性能,扩展了使用场景。被誉为最先进的包管理工具。
官网:https://pnpm.io/
中文网站:https://pnpm.io/zh/

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

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

相关文章

Ubuntu 22.04 Docker安装笔记

1、准备一台虚机 可以根据《VMware Workstation安装Ubuntu 22.04笔记》来准备虚拟机。完成后&#xff0c;根据需求安装必要的软件&#xff0c;并设置root权限进行登录。 sudo apt update sudo apt install iputils-ping -y sudo apt install vim -y允许root ssh登录&#xff1…

LVS集群的nat模式详解(负载均衡)

目录 一、LVS集群的介绍 1、LVS 相关术语&#xff1a; 2、lvs工作原理 3、相关名词概念 4、lvs集群的类型 二、lvs的nat模式 1、介绍&#xff1a; 2、数据逻辑&#xff1a; 3、nat实验部署 环境搭建&#xff1a; 1、lvs中要去打开内核路由功能&#xff0c;实现网络互联…

完整指南:卡片设计入门及实用技巧解析

UI卡片是对响应设计的终极回应。无论是响应布局还是自适应布局&#xff0c;卡片UI设计都可以为适应做出贡献&#xff0c;其灵活可控的容器结构可以根据总宽度灵活调整布局结构。虽然UI卡片在加载速度和屏幕适应性上有天然的优势&#xff0c;但由于卡片的意识&#xff0c;每个部…

Windows安装MySQL8.0.X版本归档包(zip包)最新教程

文章目录 1.安装包下载1.1 Windows版本下载2.MySQL8.0.X安装2.1 解压压缩包到指定位置2.2 初始化2.3 安装服务2.4 修改默认密码总结参考资料1.安装包下载 你可以下载 msi 文件一键安装,也可以下载解压版 zip 文件(Archive)进行命令行初始化安装,也是个人推荐的方式。 MyS…

温湿度阈值联网控制

温湿度阈值联网控制 引言 目的: 我们不管使用哪种协议, 哪种解决方案, 我们就目前的情况来看, 我们刚开始是使用 手动修改temp_th和 humi_th的方式, 来实现温湿度阈值的控制.但是对于投入到实际使用的话, 我们还需要使用更方便的联网控制, 所以我们首先利用Onenet的解决方案.…

Kickstart

一&#xff1a;实验前提&#xff1a; 1.RHEl7主机 2.开启图形 init5开图形 3.配置网络可用 4.关闭vmware dhcp功能 5.关闭火墙 二&#xff1a;下载kickstart [roottao ~]# yum install system-config-kickstart 三&#xff1a;启动kickstart并完成相关配置&#xff1a;…

JVM 加载阶段 Class对象加载位置是在 堆中还是方法区?

在JVM&#xff08;Java虚拟机&#xff09;的类加载过程中&#xff0c;Class对象的加载位置涉及到堆&#xff08;Heap&#xff09;和方法区&#xff08;Method Area&#xff09;两个关键区域。具体来说&#xff0c;类的加载阶段涉及到将类的.class文件中的二进制数据读入到内存中…

linux搭建redis超详细

1、下载redis包 链接: https://download.redis.io/releases/ 我以7.0.11为例 2、上传解压 mkdir /usr/local/redis tar -zxvf redis-7.0.11.tar.gz3、进入redis-7.0.11&#xff0c;依次执行 makemake install4、修改配置文件redis.conf vim redis.conf为了能够远程连接redis…

PHP高校教材管理系统-计算机毕业设计源码29810

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3系统开发的目标意义 1.4论文结构与章节安排 2 高校教材管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功…

Pyside6实战教程专栏目录

Pyside6实战教程&#x1f680; 专栏目录介绍 本专栏将详细地向Python开发者展示如何利用PySide6框架创建功能丰富的桌面应用程序。无论你是刚刚接触GUI编程的新手&#xff0c;还是希望快速提升自己技能水平的进阶用户&#xff0c;本文都将为你提供一系列简单易懂的教程&#xf…

Apache漏洞复现CVE-2021-41773

Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录 <Directory/>Require all granted</Directory>允许被访问的的情况下&#xff08;默认开启&#xff09;&#xff0c;攻击者可利用该路径穿越…

混合现实技术在虚拟培训、销售展示及教育科研等领域的应用方向

混合现实技术是虚拟现实技术的进一步发展方向&#xff0c;与传统的沉浸式虚拟现实技术相比混合现实技术能够为用户提供更多元化的观看场景。通过将虚拟物体与现实世界融合的全新形式为&#xff0c;包括虚拟训练、产品销售、教育科研等领域赋能。 混合现实技术中最为重要的是显示…

什么是爬虫软件?这两个爬虫神器你必须要试试

爬虫软件概述 爬虫&#xff0c;又称为网络爬虫或网页爬虫&#xff0c;是一种自动浏览互联网的程序&#xff0c;它按照一定的算法顺序访问网页&#xff0c;并从中提取有用信息。爬虫软件通常由以下几部分组成&#xff1a; 用户代理&#xff08;User-Agent&#xff09;&#xf…

08.FreeRTOS任务调度与任务切换

文章目录 08. FreeRTOS任务调度与任务切换1. FreeRTOS任务调度2. SVC中断服务函数源码调试结果分析3. FreeRTOS任务切换3.1 PendSV异常3.2 PendSV中断服务函数3.3 PendSV中断服务函数源码调试分析3.4 确定下一个要执行的任务 08. FreeRTOS任务调度与任务切换 1. FreeRTOS任务调…

MIMO技术入门(通俗易懂)

MIMO技术的思路 形象地形容就是&#xff0c;从原来的一个人在搬砖&#xff0c;转变成多个人在搬砖。 MIMO/SIMO/MISO示意图 MIMO用专业一点的词形容&#xff0c;就是发射端和接收端都有多个天线&#xff0c;这里的多天线并不是指有多个天线板&#xff0c;对于基站来说&#…

Ubuntu distro环境搭建

0 Preface/Foreword 1 环境搭建 1.1 安装make工具 sudo apt install make 1.1.1 查看make版本 1.1.2 查看make使用方法 2 搭建交叉编译工具链 2.1 解压交叉工具链到指定路径 命令解释如下&#xff1a; sudo&#xff0c; 表示使用administrative privilegetar&#xff0c;…

Unity补完计划 之 Mask SortingGroup

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.Mask 遮罩故名思意就是起到遮挡作用的罩子:精灵遮罩 - Unity 手册 如果我想让sprite与遮罩发生交互&#xff0c;那么我…

宇哥18讲需要同步搭配他的1000题吗?

张宇老师本来就以“偏难怪”著称&#xff0c;无独有偶&#xff0c;24考研真题也是“偏难怪”&#xff01; 所以&#xff0c;24考研结束之后&#xff0c;大家欧鼓吹张宇「封神」 先不说张宇老师是不是真的符合考研的趋势&#xff0c;但是跟张宇老师的同学确实比跟其他老师的同…

工具变量模型及 Stata 具体操作步骤

目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、程序代码及解释 六、代码运行结果 一、引言 在实证研究中&#xff0c;我们常常面临内生性问题&#xff0c;即解释变量与误差项相关&#xff0c;这可能导致估计结果的偏差和不一致。工具变量&#xff08;Instrum…

<数据集>agv仓储机器人识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1514张 标注数量(xml文件个数)&#xff1a;1514 标注数量(txt文件个数)&#xff1a;1514 标注类别数&#xff1a;3 标注类别名称&#xff1a;[G1PB2000_Paleteira_AGVS BYD, G1RB5000, AGV-P] 序号类别名称图片数…