npm与包

news/发布时间2024/9/20 8:03:42

  • 包的概念
    Node.js中的第三方模块又叫做包。
  • 包的来源
    由第三方个人或团队开发出来的,免费提供给所有人使用。
  • 为什么需要包
    由于Node.js内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发时,效率很低。包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率。包和内置模块之间的关系类似于jQuery和浏览器内置API之间的关系。
  • 从哪下载包
    https://www.npmjs.com/,它是全球最大的包共享平台,可以从该网站上搜索到任何你需要的包。
    https://registry.npmjs.org/的服务器对外共享所有的包,可以从该服务器上下载自己所需要的包。
  • 如何下载包
    使用Node Package Manager(简称npm包管理工具),该包管理工具随着Node.js的安装包一起被安装到了用户的电脑上,我们可以使用该工具,从https://registry.npmjs.org/服务器把需要的包下载到本地使用。

npm初体验

  • 格式化时间的传统做法

    • 创建格式化时间的自定义模块
    • 定义格式化时间的方法
    • 创建补零函数
    • 从 自定义模块中导出格式化时间的函数
    • 导入格式化时间的自定义模块
    • 调用格式化时间的函数
  • 格式化时间的高级做法

    • 使用npm包管理工具,在项目中安装格式化时间的包moment
    • 使用require()导入格式化时间的包
    • 参考moment的官方API文档对时间进行格式化

    首先在vscode终端输入npm install moment命令安装包,也可以简写成npm i moment,更推荐后者,后者更简洁。如下

    在首次安装包完成之后,项目文件夹会多出一个叫node_modules的文件夹和package.jsonpackage-lock.json两个配置文件,node_modules文件夹用来存放所有已安装到项目中的包,require()导入第三方包时就从 这个目录中 查找并加载包,package.json用于记录项目的基本信息和依赖关系,当npm install命令安装包的时候,npm包管理工具会自动把包的名称和版本号记录到该文件中,打开package.json配置文件,如下
    然后是package-lock.json文件,他是在安装依赖包时自动生成的,package-lock.json配置文件 用来记录node_modules目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。,主要作用是确保在不同环境中安装相同的依赖包版本,从而避免因为依赖包版本不一致导致的问题。当别人在克隆你的项目并运行npm install时,该文件会确保他们安装与原始项目相同的依赖包版本。如下
    注意奥:不要手动修改node_modules或package-lock.json配置文件中的任何代码,npm包管理工具会自动维护它。
    那下载完包如何使用?就要用到我们之前说的搜索网站https://www.npmjs.com/,进入该网站输入包的名称就可以找到该用法了,例如我们这里的moment,输入名称后点击对应的包,然后点击Documentation,如下
    点击出现该官网文档,往下滑即可找到对应的用法,如下
    知道该怎么使用之后我们就可以调用包里面的方法啦,如下,简单多了是吧

  • 安装指定版本的包
    默认情况下,使用npm install 命令安装包的时候,会自动安装最新版本的包,如果需要安装指定版本的包,可以在包名之后,通过@符号指定具体的版本,例如npm i moment@2.22.2

  • 包的语义化版本规范
    包的版本号是以”点分十进制“形式进行定义的,总共有三位数字,例如2.24.0,第一位数字代表大版本(当底层重构的时候大版本加一),第二位数字代表功能版本(当添加新功能时,功能版本加一),第三位表示bug修复版本(当对bug进行修复以后,bug版本加一)
    提升规则:只要前面的版本号增长了,则后面的版本号归零。例如当大版本更新,则功能版本和bug修复版本都要归零。

包管理配置文件

npm规定,在项目根目录中,必须提供一个叫做package.json的包管理配置文件,用来记录i与项目有关的一些配置信息。例如:

  • 项目的名称、版本号、描述等
  • 项目中都用到了哪些包
  • 哪些包只在开发期间会用到
  • 哪些包在开发和部署时都需要用到
    注:今后在项目开发中,一定要把node_modules文件夹添加到.gitignore 忽略文件中,有以下好处:
    • 减少仓库大小:node_modules文件夹通常包含了大量的依赖包文件,这些文件数量庞大,会显著增加Git仓库的大小。如果提交到版本控制系统,会导致克隆和拉取仓库时消耗更多的时间和磁盘空间。
    • 避免不必要的冲突:不同的开发人员可能使用不同版本的Node.js和npm,这可能导致在不同开发者环境中安装的依赖包版本不一致。将这些依赖包纳入版本控制可能会引发合并冲突,增加项目管理的复杂性。
    • 环境隔离:将node_modules文件夹排除在版本控制之外,可以确保每个开发者和部署环境都有一套独立的依赖包,这样可以避免因共享同一个部署文件系统而产生的风险。
    • 依赖包管理:node_modules文件夹可以看作是项目所依赖的外部模块的缓存,它们可以通过npm install命令自动下载和管理。因此,不需要将这些依赖包手动提交到版本控制系统中。
    • 安全性:某些依赖包可能包含敏感信息或者配置数据,例如API密钥等,这些信息不应该被提交到公共的版本控制系统中。通过忽略node_modules文件夹,可以减少泄露风险。
    • 简化部署:在部署阶段,通常需要根据生产环境的具体需求安装特定版本的依赖包。如果node_modules文件夹被提交到版本控制中,可能会干扰自动化部署流程。
  • 快速创建package.json配置文件,使用npm init -y命令,该命令只能在英文的目录下成功运行,不能使用中文和空格。PS:但现在安装包的时候已经能自动创建该配置文件了,不过只包含了包的名称和版本信息,如之前的图片一样,当我们在终端输入该命令,再打开该文件可看到显示如下
  • 一次性安装所有的包
    当我们拿到一个剔除了node_modules的项目之后,需要先把所有的包下载到项目中,才能将项目运行起来,否则会报错。可以运行npm i npm install一次性安装所有的依赖包。
  • 卸载包
    运行npm uninstall 包的名称命令来卸载指定的包
    注意:该命令执行成功后,会把卸载的包自动从package.json的dependencies中移除掉。
  • devDependencies节点
    如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies节点中。
    如果某些包再开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中。
    可以使用以下命令将包记录到devDependencies节点中,npm i 包名 -D完整名称是npm install 包名 --save-dev,表示 安装指定的包并记录到dependencies节点中。
    那如何判断安装该包是否需要加入到dependencies节点中呢?很简单,还是那个搜索网站https://www.npmjs.com/,例如这里我们搜索webpack包,打开它,看见其安装教程如下,表示它需要加到该节点中,包名和-D的顺序不重要,前后都可,当该命令运行成功后,package.json配置文件会多dependencies节点,记录该包的名称和版本,该包不会被加入到dependencies

解决下包速度慢的问题

  • 为什么下包速度慢
    因为npm下包的时候默认从国外的https://registry.npmjs.org服务器进行下载,此时,网络数据的传输需要经过漫长的海底光缆,因此下包速度很慢呢。
  • 如何解决呢
    • 淘宝NPM镜像服务器
      淘宝在国内搭建了一个服务器,专门把国外官方服务器上的包同步到国内的服务器,然后在国内提供下包的服务,从而极大提高了下包的速度。
      镜像:是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。
  • 如何切换npm的下包镜像源
    下包的镜像源指的就是下包的服务器地址。
    • 查看当前的下包镜像源
      npm config get registry
    • 将下包的镜像源切换为淘宝的镜像源
      npm config set registry=https://registry.npmmirror.com/
    • 检查镜像源是否下载成功
      npm config get registry
  • nrm
    为了更方便的切换下包的镜像源,可以安装nrm小工具,利用nrm提供的终端命令,可以快速查看和切换下包的镜像源。
    • 通过npm包管理器,将nrm安装为全局可用的工具
      npm i nrm -g
    • 查看所有可用的镜像源
      nrm ls
    • 将下载的镜像源切换为taobao镜像
      nrm use taobao

包的分类

  • 项目包
    那些被安装到项目的node_modules目录中的包都是项目包。
    项目包有分两类(前面讲过分别如何下载的哈),分别是:
    • 开发依赖包:被记录到devDependencies节点中的包,只在开发期间会用到
    • 核心依赖包:被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到
  • 全局包
    在执行npm install命令时,如果提供了-g参数,则会把包安装为全局包。
    npm i 包名 -g全局安装指定的包
    npm uninstall 包名 -g卸载全局安装的包
    全局包默认会被安装到C:\Users\用户目录\AppData\Roaming\npm\node_modules目录下,那可能根据自己的电脑不同会稍有差别,例如我的全局包是安装在D:\Node.js\node_global\node_modules,因为我安装时修改了路径,在该目录下我可以查看到我刚刚下载的全局包nrm,如下
    注意:
    • 只有工具性质的包,才有全局安装的必要性。因为他们提供了好用的终端命令。
    • 判断某个包是否需要全局安装后才能使用,参考官方提供的说明即可。就是上面提到的搜索网站,查看该包官方文档即可。
  • i5ting_toc
    i5ting_toc是一个可以把md文档转为html页面的小工具,使用步骤如下:
    • 将i5ting_toc安装为全局包
      npm install -g i5ting_toc
    • 调用i5ting_toc,轻松实现md转html的功能
      i5ting_toc -f 要转换的md文件路径 -o
    • 可以在该md文件目录下右击打开终端,先安装该包,然后执行该命令即可

规范的包结构

  • 一个规范的包,他的组成结构必须符合以下三点要求:
    - 包必须以单独的目录而存在
    - 包的顶级目录下要必须包含package.json这个包管理配置文件
    - package.json中必须包含name,version,main这三个属性,分别代码 包的名字、版本号和包的入口。

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Vue.js的双向绑定原理

Vue的双向绑定 vue双向绑定是其最重要的核心亮点,其原理也很简单,这里做个简单总结 vue2的双向绑定是利用的Object.definePropertyvue3的双向绑定是利用的 ES6Porxy中的defineProperty(target, propKey, propDesc 其作用类似于Object.defineProperty …

【脑切片图像分割】MATLAB 图像处理 源码

1. 简单图像处理 加载图像 Brain.jpg,使用直方图和颜色分割成区域这些区域有不同的颜色。 这是一个更高级的问题,有多个解决它的方法。 例如,您可以计算具有特定数字的图像的直方图(例如 16 - 32),找到直方…

在 Rust 中实现 TCP : 1. 联通内核与用户空间的桥梁

内核-用户空间鸿沟 构建自己的 TCP栈是一项极具挑战的任务。通常,当用户空间应用程序需要互联网连接时,它们会调用操作系统内核提供的高级 API。这些 API 帮助应用程序 连接网络创建、发送和接收数据,从而消除了直接处理原始数据包的复杂性。…

SpringBoot底层原理

SpringBoot底层原理 一 配置优先级 1.配置方式 Springboot中支持三种配置方式,分别为: application.propertiesapplication.ymlapplication.yaml 2.配置优先级 当存在多份配置文件时,配置文件会按照它们的优先级生效。 优先级从高到底…

uniapp 编译微信小程序的离谱报错

上图: 如图所示:在同一个元素上同时出现了 wx:if 和 wx:else 就很离谱

LeetCode215.数组中的第K个最大元素

题目 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 输入: [3,2,1,5,6,4], …

RISC-V特权架构 - 机器模式下的异常处理

RISC-V特权架构 - 机器模式下的异常处理 1 进入异常1.1 从mtvec 定义的PC 地址开始执行1.2 更新CSR 寄存器mcause1.3 更新CSR 寄存器mepc1.4 更新CSR 寄存器mtval1.5 更新CSR 寄存器mstatus 2 退出异常2.1 从mepc 定义的PC 地址开始执行2.2 更新CSR 寄存器mstatus 3 异常服务程…

使用 Haproxy 搭建Web群集

Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS 和Nginx。相比较而言,LVS.牲能最好.但是搭建相对复杂:Nginx的upstream模块支持群集功能.但是对群集节点健康检查功能不强,性能没有…

进程操作(Win32, C++)

CProcessUtils.h #pragma once#include <wtypesbase.h> #include <tchar.h> #include <vector> #include <map> #include <string>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 进程信息 typed…

Java JDBC JDBC事务管理 JDBC连接池(阿里巴巴Druid连接池、C3P0连接池) JDBC工具类

Java数据库连接 Java DataBase Connectivity。JDBC 规范定义接口&#xff0c;具体的实现由各大数据库厂商来实现。 JDBC可让Java通过程序操作关系型数据库&#xff0c;JDBC基于驱动程序实现与数据库的连接与操作。 JDBC 是 Java 访问数据库的标准规范&#xff0c;真正怎么操作…

gRPC知识归档

文章目录 gRPC知识归档gRPC原理什么是gRPCgRPC的特性gRPC支持语言gRPC使用场景gRPC设计的动机和原则 数据封装和数据传输问题网络传输中的内容封装和数据体积问题JSONProtobuf&#xff08;微服务之间的服务器调用&#xff0c;一般采用二进制序列化&#xff0c;比如protobuf&…

基于springboot实现图书馆管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现图书馆管理系统演示 摘要 电脑的出现是一个时代的进步&#xff0c;不仅仅帮助人们解决了一些数学上的难题&#xff0c;如今电脑的出现&#xff0c;更加方便了人们在工作和生活中对于一些事物的处理。应用的越来越广泛&#xff0c;通过互联网我们可以更方便地…

浅谈 Linux 网络编程 - Server 端模型、sockaddr、sockaddr_in 结构体

文章目录 前言前置知识Server 端核心模型 【重点】相关函数 【重点】socket 函数bind 函数listen 函数accept 函数close 函数 sockaddr 数据结构 【重点】 前言 本文主要是对 Linux 网络编程中&#xff0c;Server 端的模型、相关函数 以及 sockaddr、sockaddr_in 结构体做介绍…

Apache Echarts介绍与入门

介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 官网地址&#xff1a;https://echarts.apache.org/zh/index.html 入门案例 Apache Echarts官方提供的快…

物联网技术助力智慧城市安全建设:构建全方位、智能化的安全防护体系

一、引言 随着城市化进程的加速和信息技术的迅猛发展&#xff0c;智慧城市已成为现代城市发展的重要方向。在智慧城市建设中&#xff0c;安全是不可或缺的一环。物联网技术的快速发展为智慧城市安全建设提供了有力支持&#xff0c;通过构建全方位、智能化的安全防护体系&#…

HCIA-HarmonyOS设备开发V2.0证书

目录 一、不墨迹&#xff0c;上证书二、考试总结三、习题四、知识点五、坚持就有收获 HCIA-HarmonyOS Device Developer V2.0 开发者能力认证考试已通过。 一、不墨迹&#xff0c;上证书 一个多月的努力&#xff0c;验证了自己的学习成果&#xff0c;也认识到自己有待提升之处…

CleanMyMac X2024测评深度分析与功能全面介绍

一、软件概述 CleanMyMac X 是一款强大的Mac清理和优化工具&#xff0c;它可以帮助用户轻松管理和释放Mac上的空间&#xff0c;优化系统性能&#xff0c;提高运行速度。这款软件以其直观的用户界面和丰富的功能受到了广大Mac用户的欢迎。 CleanMyMac X4.14.6全新版下载如下: …

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一)

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验&#xff08;前导&#xff09; 四、AXI转FIFO接口模块设计 1.AXI接口知识 AXI协议是基于 burst的传输&#xff0c;并且定义了以下 5 个独立的传输通道&#xff1a; 读地址通道&#xff08;Read Address Channel&#xff0c; …

练习 3 Web [ACTF2020 新生赛]Upload

[ACTF2020 新生赛]Upload1 中间有上传文件的地方&#xff0c;试一下一句话木马 txt 不让传txt 另存为tlyjpg&#xff0c;木马文件上传成功 给出了存放目录&#xff1a; Upload Success! Look here~ ./uplo4d/06a9d80f64fded1e542a95e6d530c70a.jpg 下一步尝试改木马文件后缀…

小程序实现定位城市切换且城市根据首字母A-Z排序后端数据实现逻辑

场景&#xff1a; 话不多说后端提供数据实现步骤&#xff1a; 1.controller层 Api(tags {"[地区]-城市相关接口"}) RestController RequestMapping("region") Slf4j public class RegionController extends BaseController {Resourceprivate RegionServ…
推荐文章