(四)Node.js - npm与包

news2024/9/23 13:29:33

1. 什么是包

Node.js中的第三方模块又叫做

不同于Node.js中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。

由于Node.js的内置模块进提供了一些底层的API,导致在基于内置模块进行项目开发时,效率很低。包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率

从哪里下载包

国外有一家IT公司,叫做npm,Inc。这家公司旗下有一个非常著名的网站:https://www.npmjs.com/,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包,只要你有足够的耐心。

npm,Inc公司提供了一个地址为https://registry.npmjs.org/的服务器,来对外共享所有的包,我们可以从这个服务器上下载自己所需的包。

npm包管理工具

这个包管理工具的名字叫做Node Package Manager,这个包管理工具随着Node.js的安装包一起被安装到了用户的电脑上。

大家可以在终端上执行npm -v命令,来查看自己电脑上所安装的npm包管理工具的版本号:

npm -v
9.5.1

2. npm初体验

2.1 格式化时间的传统做法

自己实现时间处理函数代码,供自己使用

2.2 格式化时间的高级做法

在项目中安装包的命令
npm install 包的完整名称
# 简写形式
npm i 包的完整名称
代码示例

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

//1. 导入moment包
const moment = require('moment')

//2. 参考moment官方API,调用对应的方法,对时间进行格式化
const dt = moment().format('YYYY-MM-DD HH:mm:ss')

console.log(dt) // 2023-08-05 17:07:45

2.3 初次装包后多了哪些文件

初次装包完成后,在项目文件夹下多一个叫做node_modules的文件夹和package-lock.json的配置文件。

其中:
(1)node_modules文件夹用来存放所有已安装到项目中的包。require()导入第三方包时,就是从这个目录中查找并加载包。
(2)package-lock.json配置文件用来记录node_modules目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。

注意:程序员不要手动修改node_modules或package-lock.json文件中的任何代码,npm包管理工具会自动维护它们。

2.4 安装指定版本的包

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

npm install moment@2.22.2

3. 包管理配置文件 - package.json

npm规定,在项目根目录中,必须提供一个叫做package.json的包管理配置文件。用来记录与项目有关的一些配置信息。例如:
(1)项目的名称、版本号、描述等
(2)项目中都用了那些包
(3)哪些包只在开发期间会用到
(4)哪些包在开发部署时都需要用到

3.1 多人协作问题

在这里插入图片描述
整个项目的体积是30.4M
第三方包的体积是28.8M
项目源代码的体积是1.6M

遇到的问题:第三方包的体积过大,不方便团队成员之间共享项目源代码。

解决方案:共享时剔除node_modules

3.2 如何记录项目中安装了哪些包

项目根目录中,创建一个叫做package.json的配置文件,即可用来记录项目中安装了哪些包。从而方便剔除node_modules目录之后,在团队成员之间共享项目的源代码。

注意:今后在项目开发中,一定要把node_modules文件夹,添加到.gitignore忽略文件中。

3.3 快速创建package.json

npm包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建package.json这个包管理配置文件:

# 作用:在执行命令所处的目录中,快速创建package.json文件
npm init -y

注意:
(1)上述命令只能在英文的目录下成功运行!所以文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格
(2)运行npm install命令安装包时,npm包管理工具会自动把包的名称版本号,记录在package.json中。

3.4 dependencies节点

package.json文件中,有一个dependencies节点,专门用来记录您使用npm install命令安装了哪些包。

{
  "name": "learnjs",
  "version": "1.0.0",
  "description": "学习网站: http://c.biancheng.net/view/5359.html",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {    //节点
    "moment": "^2.29.4"
  }
}

3.5 一次性安装所有的包

当我们拿到一个剔除了node_modules的项目之后,需要先把所有的包下载到项目中,才能将项目运行起来。否则汇报类似于下面的错误:

Error: Cannot find module 'moment'

可以运行npm install命令(或npm i)一次性安装所有的依赖包。

# 执行npm install命令时,npm包管理工具会先读取package.json中的dependencies节点
# 读取到记录的所有依赖包和版本号之后,npm包管理工具会把这些包一次性下载到项目中
npm install

3.6 卸载包

可以运行npm uninstall命令,来卸载指定的包:

npm uninstall moment

注意:npm uninstall命令执行成功后,会把卸载的包,自动从package.json的dependencies中移除掉。

3.7 devDependencies节点

如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies节点中。

与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中。

您可以使用如下的命令,将包记录到devDependencies节点中:

# 安装指定的包,并记录到devDependencies节点中
npm i 包名 -D
# 注意:上述命令时简写形式,等价于下面完整的写法:
npm install 包名 --save-dev

4. 解决下载包速度慢问题

切换npm的下包镜像源

下包的镜像源,指的是下包的服务器地址

# 查看当前的下包镜像源
npm config get registry
# 将下包的镜像源切换为淘宝镜像源
npm config set registry=https://registry.npm.taobao.org/
# 检查镜像源是否下载成功
npm config get registry

nrm

为了更方便的切换下包的镜像源,我们可以安装nrm这个小工具,利用nrm提供的终端命令,可以快速查看和切换下包的镜像源

# 通过npm包管理器,将nrm安装为全局可用的工具
npm i nrm -g
# 查看所有可用的镜像源
nrm ls
# 将下包的镜像源切换为taobao镜像
nrm use taobao

5. 包的分类

5.1 项目包

那些被安装到项目的node_modules目录中的包,都是项目包。

项目包又分为两类,分别是:
(1)开发依赖包(被记录在devDependencies节点中的包,只在开发期间会用到)
(2)核心依赖包(被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到)

npm i 包名 -D # 开发依赖包
npm i 包名    # 核心依赖包

5.2 全局包

在执行npm install命令时,如果提供了-g参数,则会把包安装为全局包

查看全局包默认安装路径:

npm root -g

# mac: /usr/local/lib/node_modules
npm i 包名 -g           # 全局安装指定的包
npm uninstall 包名 -g   # 卸载全局安装的包

5.3 i5ting_toc

i5ting_toc是一个可以把md文档转为html页面的小工具,使用步骤如下:

# 将i5ting_toc安装为全局包
npm install -g i5ting_toc
# 调用 i5ting_toc,轻松实现 md转html 的功能
i5ting_toc -f 要转换的md文件路径 -o

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

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

相关文章

无涯教程-Perl - foreach 语句函数

foreach 循环遍历列表值,并将控制变量(var)依次设置为列表的每个元素- foreach - 语法 Perl编程语言中的 foreach 循环的语法是- foreach var (list) { ... } foreach - 流程图 foreach - 示例 #!/usr/local/bin/perllist(2, 20, 30, 40, 50);# foreach loop ex…

6.3 填充和步幅

一.填充 1.作用: 为了防止丢失边缘像素。如240x240的像素图像,经过10层5x5卷积,根据输出形状计算公式 (w-k1) x (h-k1)计算出输出形状变成了200x200。 2.方法: 最常用的方法是填充0。如下: 3.公式:计算填充原图像…

分布式系统:ACID与CAP

ACID: 在计算机科学中,ACID是数据库事务的一组特性,旨在保证数据的有效性,即使在出现错误、断电和其他意外情况下也能保持数据的一致性。在数据库的上下文中,满足ACID属性的一系列数据库操作(可以被视为对数据的单一逻…

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来&…

kubernetes基于helm部署gitlab-runner

kubernetes基于helm部署gitlab-runner 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab-runner。 先决条件: 已运行的 Kubernetes 集群已运行的 gitlab 实例 项目地址:https://gitlab.com/gitlab-org/charts/gitlab-runner 官方文档&#xff…

【Spring】Spring AOP 初识及实现原理解析

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 目录 文章目录 一、初识AOP 1.1 什么是AOP? 1.2 AOP的组成 1.2.1 切面(Aspect) 1.2.2 切点(Pointcut) 1.2.3 连接点&…

OKR管理策略:为开发团队注入动力

引言 在这个快速变化的世界中,公司需要迅速应对市场变化,并保持其目标和战略的清晰性和一致性。而OKR(Objectives and Key Results)正是这个挑战的解决方案之一。OKR的实施可以帮助开发团队明确目标,关注关键结果&…

java使用openOffice将excel转换pdf时,将所有列显示在一页

1.接上文,格式转换的基础问题已解决,但还有些细节问题需要单独处理,如excel转换至pdf时,如何将所有列显示在一页的问题,此问题大家都有遇到,解决方案也比较多,我也尝试过重写某类,来…

arcgis--网络分析(理论篇)

1、定义概念 (1)网络:由一系列相互联通的点和线组成,用来描述地理要素(资源)的流动情况。 (2)网络分析:对地理网络(如交通网络、水系网络)&…

Emacs之set-face-attribute与font-lock-add-keywords用法区别(一百二十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

怎样将项目jar包放到服务器上

目录 1、在配置文件中配置账号密码 2.在父级的pom里面,加上这个标签 3. deploy部署 4. 注:这两个id得匹配上(原因:有的人会只有上传到测试包的权限,id对应,拥有账号密码的才能有权限) 5.子项…

Milvus Cloud凭借AI原生,可视化优势荣登全球向量数据库性能排行榜VectorDBBench.com 榜首

在当今的大数据时代,随着人工智能技术的快速发展,向量数据库作为处理大规模数据的关键工具,其性能和效率越来越受到关注。最近,全球向量数据库性能排行榜 VectorDBBench.com 公布了一份最新的评估报告,引人瞩目的是,成立不到一年的新兴公司 Milvus Cloud 凭借其 AI 原生和…

leetcode 1290.二进制链表转整数

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;二进制链表转整数 ps&#xff1a; 1 0 1 (0 << 1) 1 0 1 1 (1 << 1) 0 2 0 2 (2 << 1) 1 4 1 5代码&#xff1a; int getDecimalValue(struct ListNode* head) {int ans 0;while(head !…

MySQL — InnoDB介绍

文章目录 InnoDB 主要特点InnoDB 架构In-Memory StructuresBuffer PoolChange BufferAdaptive Hash IndexLog Buffer On-Disk StructuresSystem TablespaceFile-Per-Table TablespacesGeneral TablespacesUndo TablespacesTemporary TablespacesDoublewrite BufferRedo LogUndo…

spring boot中web容器配置

web容器配置 spring boot 默认的web容器是 tomcat&#xff0c;如果需要换成其他的 web 容器&#xff0c;可以如下配置。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 默…

ROS添加节点

1 下载项目源码 &#xff08;1&#xff09;这里我使用是哔哩哔哩的博主源码机器人工匠王杰 https://github.com/6-robot/wpr_simulation.git &#xff08;2&#xff09;建立工作空间 在主目录下载建立如下文件夹 catkin_ws----       ----src &#xff08;3&#xff09;…

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本 引言 在 Java 生态系统中&#xff0c;Spring Boot、Spring Cloud 和 Spring Alibaba 是非常流行的框架&#xff0c;它们提供了丰富的功能和优雅的解决方案。然而&#xff0c;随着不断的发展和更新&…

【51单片机】晨启科技,酷黑版,音乐播放器

四、音乐播放器 任务要求&#xff1a; 设计制作一个简易音乐播放器&#xff08;通过手柄板上的蜂鸣器发声&#xff0c;播放2到4首音乐&#xff09;&#xff0c;同时LED模块闪烁&#xff0c;给人视、听觉美的感受。 评分细则&#xff1a; 按下播放按键A6开始播放音乐&#xff0…

使用Socket实现TCP版的回显服务器

文章目录 1. Socket简介2. ServerSocket3. Socket4. 服务器端代码5. 客户端代码 1. Socket简介 Socket&#xff08;Java套接字&#xff09;是Java编程语言提供的一组类和接口&#xff0c;用于实现网络通信。它基于Socket编程接口&#xff0c;提供了一种简单而强大的方式来实现…

SpringBoot项目上传至服务器

1.服务器安装JDK1.8 通过包管理器安装 2.服务器安装数据库 参考链接&#xff1a; CentOS 7 通过 yum 安装 MariaDB - 知乎 1. 安装之后没有密码&#xff0c;所以需要设置密码&#xff0c;使用下面的语句 set password for rootlocalhost password(111111); 2.在数据库中建…