(四)Node.js - npm与包

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.mzph.cn/news/30456.shtml

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

相关文章

USB(二):Type-C

一、引脚定义 Type-C口有 4对TX/RX差分线,2对USB D/D-,1对SBU,2个CC,4个VBUS和4个地线Type-C母座视图: Type-C公头视图: 二、关键名词 DFP(Downstream Facing Port): 下行端口&#xff0c…

代码随想录第三十三天

代码随想录第三十三天 Leetcode 122. 买卖股票的最佳时机 IILeetcode 55. 跳跃游戏Leetcode 45. 跳跃游戏 II Leetcode 122. 买卖股票的最佳时机 II 题目链接: 买卖股票的最佳时机 II 自己的思路:根本想不到!!! 正确思路:遇到相邻两天的正利…

Direct path read LOB

Table full scan : wait event Direct path read because of LOB "Direct path read" Wait Event During LOB Access (Doc ID 2287482.1)​编辑To Bottom In this Document Symptoms Changes Cause Solution References APPLIES TO: Oracle Database …

QT读写配置文件

文章目录 一、概述二、使用步骤1.引入头文件2.头文件的public中定义配置文件对象3.初始化 一、概述 Qt中常见的配置文件为(.ini)文件,其中ini是Initialization File的缩写,即初始化文件。 配置文件的格式如下所示: 模…

win11虚拟机安装

win11虚拟机安装 下载虚拟机客户端安装客户端创建虚拟机下载 ISO切换root账号GNOME桌面 下载虚拟机客户端 版本是16.2.3 链接:https://pan.baidu.com/s/13c6XVWFbeQKbCnrlfxD8cA 提取码:qxdc 安装客户端 安装向导 点击下一步 接收条款,点…

爬虫012_字典高级操作_查询_修改_添加_删除和清空_遍历---python工作笔记031

然后来看字典高级,首先 打印某个元素 然后打印的时候注意,如果直接打印的值,在字典中没有就报错 这里要注意不能用点访问

java 知识点

基本语法: 变量和数据类型控制流语句(if、else、switch)循环语句(for、while、do-while)面向对象编程(OOP): 类和对象 封装、继承和多态性构造方法和析构方法抽象类和接口 异常处…

【多维定向滤波器组和表面波】表面变换:用于高效表示多维 s 的多分辨率变换(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Docker Compose用法详解

文章目录 Docker Compose是什么安装Docker ComposeCompose文件编写使用Docker Compose部署-管理应用 Docker Compose是什么 Docker Compose是一个用于定义和运行多容器Docker应用程序的python工具。它允许您使用一个单独的配置文件来定义和配置多个相关容器的服务,…

【leetcode】454. 四数相加 II(medium)

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 思路&#xff1a;如果要暴力&#xff0c;那么时间复杂…

Unity 基础函数

Mathf&#xff1a; //1.π-PI print(Mathf.PI); //2.取绝对值-Abs print(Mathf.Abs(-10)); print(Mathf.Abs(-20)); print(Mathf.Abs(1)); //3.向上取整-Ce il To In t float f 1.3f; int i (int)f; …

GCLIB动态代理

1.创建要代理的类 public class Boy {public void eat() {System.out.println("eat");} } 2.创建拦截器 public class MyMethodInterceptor implements MethodInterceptor {Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodPr…

如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透?

如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透&#xff1f; 文章目录 如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透&#xff1f;前言1. 在群辉NAS系统下安装cpolar套件2. 管理隧道列表3. 创建固定数据隧道 前言 群晖作为大容量存储系统&#xff0c;既可…

git rebase

git rebase 详解git rebase&#xff0c;让你走上git大神之路 - 知乎 git练习 Learn Git Branching

AIGC之stable diffusion(SD)炼丹总结

1 stable diffusion技术介绍 2 常用资源 社区&#xff1a; civitai : 主流的AI绘画模型分享网站, 可以看大家分享出来的模型和生成的图像。 但是国内用户要访问这个网站&#xff0c; 需要科学上网。 aigccafe 这个是civitai的国内镜像网站&#xff0c;推荐使用这个。 代码…

bootloader跳转APP注意事项

在gd32f427 时跳转异常 参考文章&#xff1a; https://club.rt-thread.org/ask/question/425321.html%20https:/club.rt-thread.org/ask/question/eab19452583b5959.html https://club.rt-thread.org/ask/question/eab19452583b5959.html 关闭全部中断&#xff0c;并且清除中…

springcloud3 springcloud stream的学习以及案例

一 springcloud stream的作用 1.1 springcloud stream作用 stream屏蔽底层消息中间件的差异&#xff0c;降低切换成本&#xff0c;统一消息的编程模型。 stream中的消息通信模式遵循了“发布-订阅”模式。 1.2 Binder作用 通过定义绑定器Binder作为中间层&#xff0c;实现…

力扣hot100刷题记录

二刷hot100&#xff0c;坚持每天打卡&#xff01;&#xff01;&#xff01;Today&#xff1a;2023-8-10 1. 两数之和 // 先求差&#xff0c;再查哈希表 public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map new HashMap<>();for(int i 0;i&…

深度ip转换器:一键更换ip地址方法

很多网友问小编有关深度ip转换器怎么用&#xff1f;最新深度ip转换器手机版app&#xff1f;下面小编整理了深度ip转换器怎么修改ip地址的技巧和诀窍&#xff0c; 让我们来详细的了解一下深度id转换器&#xff0c; 一、深度ip转换器怎么用 1.深度ip转换器怎么用&#xff0c;深度…

JavaScript:深入探索async/await的使用

在JavaScript的异步编程领域&#xff0c;ES8引入的async/await语法是一项重要的创新。它让异步代码看起来更像同步代码&#xff0c;使得处理异步操作变得更加清晰和简洁。本文将深入探索async/await的使用&#xff0c;帮助你充分发挥这项技术的优势。 1. 什么是async/await&…