nodejs学习计划--(六)包管理工具
包管理工具
1. 介绍
- 包是什么
『包』英文单词是package
,代表了一组特定功能的源码集合 - 包管理工具
管理『包』的应用软件,可以对「包」进行 下载安装 , 更新 , 删除 , 上传 等操作
借助包管理工具,可以快速开发项目,提升开发效率
包管理工具是一个通用的概念,很多编程语言都有包管理工具,所以 掌握好包管理工具非常重要 - 常用的包管理工具
npm
yarn
cnpm
2. npm
npm
全称Node Package Manager
,翻译为中文意思是『Node
的包管理工具』
npm
是node.js
官方内置的包管理工具,是 必须要掌握住的工具
1. npm
的安装
node.js
在安装时会 自动安装 npm
,所以如果你已经安装了 node.js
,可以直接使用 npm
可以通过 npm -v
查看版本号测试,如果显示版本号说明安装成功,反之安装失败
2. npm
基本使用
- 初始化
创建一个空目录,然后以此目录作为工作目录 启动命令行工具 ,执行npm init
npm init
命令的作用是将文件夹初始化为一个『包』, 交互式创建package.json
文件
package.json
是包的配置文件,每个包都必须要有package.json
package.json
内容示例:
{
"name": "01_npm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
属性翻译:
{
"name": "1-npm", #包的名字
"version": "1.0.0", #包的版本
"description": "", #包的描述
"main": "index.js", #包的入口文件
"scripts": { #脚本配置
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "", #作者
"license": "ISC" #开源证书
}
初始化的过程中还有一些注意事项:
package name
( 包名 ) 不能使用中文、大写,默认值是 文件夹的名称 ,所以文件夹名称也不能使用中文和大写version
( 版本号 )要求x.x.x
的形式定义,x
必须是数字,默认值是1.0.0
ISC
证书与MIT
证书功能上是相同的,关于开源证书扩展阅读http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
package.json
可以手动创建与修改- 使用
npm init -y
或者npm init --yes
极速创建package.json
-
搜索包
搜索包的方式有两种:- 命令行
npm s/search 关键字』
- 网站搜索 网址是
https://www.npmjs.com/
- 命令行
-
下载安装包
我们可以通过npm install
和npm i
命令安装包
# 格式
npm install <包名>
npm i <包名>
# 示例
npm install uniq
npm i uniq
运行之后文件夹下会增加两个资源
node_modules
文件夹 存放下载的包package-lock.json
包的锁文件 ,用来锁定包的版本
安装
uniq
之后,uniq
就是当前这个包的一个 依赖包 ,有时会简称为 依赖
比如我们创建一个包名字为A
,A
中安装了包名字是B
,我们就说B
是A
的一个依赖包 ,也会说A
依赖B
require
导入npm
包基本流程- 在当前文件夹下
node_modules
中寻找同名的文件夹 - 在上级目录中下的
node_modules
中寻找同名的文件夹,直至找到磁盘根目录
- 在当前文件夹下
3. 生产环境与开发环境
开发环境是程序员 专门用来写代码 的环境,一般是指程序员的电脑,开发环境的项目一般 只能程序员自己访问
生产环境是项目 代码正式运行 的环境,一般是指正式的服务器电脑,生产环境的项目一般 每个客户都可以访问
4. 生产依赖与开发依赖
我们可以在安装时设置选项来区分 依赖的类型 ,目前分为两类:
类型 | 命令 | 补充 |
---|---|---|
生产依赖 | npm i -S uniq | S 等效于 --save , -S 是默认选项 |
npm i --save uniq | 包信息保存在 package.json 中 dependencies 属性 | |
开发依赖 | npm i -D less | -D 等效于 --save-dev |
npm i --save-dev less | 包信息保存在 package.json 中 devDependencies 属性 |
举个例子方便大家理解,比如说做蛋炒饭需要 大米 , 油 , 葱 , 鸡蛋 , 锅 , 煤气 , 铲子 等
其中 锅 , 煤气 , 铲子 属于开发依赖,只在制作阶段使用
而 大米 , 油 , 葱 , 鸡蛋 属于生产依赖,在制作与最终食用都会用到
所以 开发依赖 是只在开发阶段使用的依赖包,而 生产依赖 是开发阶段和最终上线运行阶段都用到
的依赖包
5. 全局安装
我们可以执行安装选项 -g
进行全局安装
npm i -g nodemon
全局安装完成之后就可以在命令行的任何位置运行 nodemon
命令
该命令的作用是 自动重启 node
应用程序
说明:
- 全局安装的命令不受工作目录位置影响
- 可以通过
npm root -g
可以查看全局安装包的位置- 不是所有的包都适合全局安装 , 只有全局类的工具才适合,可以通过 查看包的官方文档来确定安装方式
1. 修改 windows 执行策略
windows
默认不允许 npm
全局命令执行脚本文件,所以需要修改执行策略
-
以 管理员身份 打开
powershell
命令行
-
键入命令
set-ExecutionPolicy remoteSigned
-
键入 A 然后敲回车
-
如果不生效,可以尝试重启
vscode
2. 环境变量 Path
Path
是操作系统的一个环境变量,可以设置一些文件夹的路径,在当前工作目录下找不到可执行文件
时,就会在环境变量 Path
的目录中挨个的查找,如果找到则执行,如果没有找到就会报错
补充说明:
- 如果希望某个程序在任何工作目录下都能正常运行,就应该将该程序的所在目录配置到环境变量
Path
中windows
下查找命令的所在位置
cmd
命令行 中执行where nodemon
powershell命令行
执行get-command nodemon
6. 安装包依赖
在项目协作中有一个常用的命令就是 npm i
,通过该命令可以依据 package.json
和 package-lock.json
的依赖声明安装项目依赖
npm i
npm install
node_modules
文件夹大多数情况都不会存入版本库
7. 安装指定版本的包
项目中可能会遇到版本不匹配的情况,有时就需要安装指定版本的包,可以使用下面的命令的
## 格式
npm i <包名@版本号>
## 示例
npm i jquery@1.11.2
8. 删除依赖
项目中可能需要删除某些不需要的包,可以使用下面的命令
## 局部删除
npm remove uniq
npm r uniq
## 全局删除
npm remove -g nodemon
9. 配置命令别名
通过配置命令别名可以更简单的执行命令
配置 package.json
中的 scripts
属性
{..."scripts": {"server": "node server.js","start": "node index.js",},...
}
配置完成之后,可以使用别名执行命令
npm run server
npm run start
不过 start 别名比较特别,使用时可以省略 run
npm start
补充说明:
npm start
是项目中常用的一个命令,一般用来启动项目npm run
有自动向上级目录查找的特性,跟require
函数也一样- 对于陌生的项目,我们可以通过查看
scripts
属性来参考项目的一些操作
3. cnpm
1. 介绍
cnpm
是一个淘宝构建的 npmjs.com
的完整镜像,也称为『淘宝镜像』,网址https://npmmirror.com/
cnpm
服务部署在国内 阿里云服务器上 , 可以提高包的下载速度
官方也提供了一个全局工具包 cnpm
,操作命令与 npm
大体相同
2. 安装
我们可以通过 npm
来安装 cnpm
工具
npm install -g cnpm --registry=https://registry.npmmirror.com
3. 操作命令
功能 | 命令 |
---|---|
初始化 | cnpm init |
安装包 | cnpm i uniq |
安装项目依赖 | cnpm i ,cnpm i -S uniq , cnpm i -D uniq , cnpm i -g uniq |
删除 | cnpm r uniq |
4. npm
配置淘宝镜像
用 npm
也可以使用淘宝镜像,配置的方式有两种
- 直接配置
- 工具配置
- 直接配置
执行如下命令即可完成配置
npm config set registry https://registry.npmmirror.com/
- 工具配置
使用nrm
配置npm
的镜像地址npm registry manager
- 安装
nrm
npm i -g nrm
- 修改镜像(
nrm ls
查看可切换的地址)
nrm use taobao
- 检查是否配置成功(选做)
npm config list
检查registry
地址是否为https://registry.npmmirror.com/
, 如果 是 则表明成功
补充说明:
- 建议使用第二种方式 进行镜像配置,因为后续修改起来会比较方便
- 虽然
cnpm
可以提高速度,但是npm
也可以通过淘宝镜像进行加速,所以npm
的使用率还是高于cnpm
4. yarn
1. 介绍
yarn
是由 Facebook
在 2016
年推出的新的 Javascript
包管理工具,官方网址:https://yarnpkg.com/
2. 特点
yarn
官方宣称的一些特点
- 速度超快:
yarn
缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快 - 超级安全:在执行代码之前,
yarn
会通过算法校验每个安装包的完整性 - 超级可靠:使用详细、简洁的锁文件格式和明确的安装算法,
yarn
能够保证在不同系统上无差异的工作
3. 安装
我们可以使用 npm
安装 yarn
npm i -g yarn
4. 常用命令
功能 | 命令 |
---|---|
初始化 | yarn init /yarn init -y |
安装包 | yarn add uniq 生产依赖 |
yarn add less --dev 开发依赖 | |
yarn global add nodemon 全局安装 | |
删除包 | yarn remove uniq 删除项目依赖包 |
yarn global remove nodemon 全局删除包 | |
安装项目依赖 | yarn |
运行命令别名 | yarn <别名> 不需要添加 run |
yarn
全局安装的包不可用,可以通过yarn global bin
查看全局安装包位置,然后配置Path
路径
5. 配置淘宝镜像
可以通过如下命令配置淘宝镜像
yarn config set registry https://registry.npmmirror.com/
可以通过 yarn config list
查看 yarn
的配置项
6. npm
和 yarn
选择
大家可以根据不同的场景进行选择
- 个人项目
如果是个人项目, 哪个工具都可以 ,可以根据自己的喜好来选择 - 公司项目
如果是公司要根据项目代码来选择,可以 通过锁文件判断 项目的包管理工具npm
的锁文件为package-lock.json
yarn
的锁文件为yarn.lock
包管理工具 不要混着用,切记,切记,切记
5. 管理发布包
1. 创建与发布
我们可以将自己开发的工具包发布到 npm
服务上,方便自己和其他开发者使用,操作步骤如下:
- 创建文件夹,并创建文件
index.js
, 在文件中声明函数,使用module.exports
暴露 npm
初始化工具包,package.json
填写包的信息 (包的名字是唯一的)- 注册账号
https://www.npmjs.com/signup
- 激活账号 ( 一定要激活账号 )
- 修改为官方的官方镜像 (命令行中运行
nrm use npm
) - 命令行下
npm login
填写相关用户信息 - 命令行下
npm publish
提交包 👌
2. 更新包
后续可以对自己发布的包进行更新,操作步骤如下
- 更新包中的代码
- 测试代码是否可用
- 修改
package.json
中的版本号 - 发布更新
npm publish
3. 删除包
执行如下命令删除包
npm unpublish --force
删除包需要满足一定的条件,
https://docs.npmjs.com/policies/unpublish
- 你是包的作者
- 发布小于 24 小时
- 大于 24 小时后,没有其他包依赖,并且每周小于 300 下载量,并且只有一个维护者
六、扩展内容
在很多语言中都有包管理工具,比如:
语言 | 包管理工具 |
---|---|
PHP | composer |
Python | pip |
Java | maven |
Go | go mod |
JavaScript | npm/yarn/cnpm/other |
除了编程语言领域有包管理工具之外,操作系统层面也存在包管理工具,不过这个包指的是**『 软件包 』** | |
语言 | 包管理工具 |
- | - |
MacOS | composer |
Windows | chocolatey |
7.nvm
可以查看此处
相关文章:

nodejs学习计划--(六)包管理工具
包管理工具 1. 介绍 包是什么 『包』英文单词是 package ,代表了一组特定功能的源码集合包管理工具 管理『包』的应用软件,可以对「包」进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具,可以快…...

数字地球开放平台农作物长势监测解决方案
数字地球开放平台农作物长势监测解决方案 利用遥感技术进行产量预测是一种高效而准确的方法,通过监测植被的生长状况、土地利用、气象等因素,可以为农业决策提供有力支持。数字地球开放平台拥有200颗卫星,为您提供一站式卫星遥感服务。 农情监…...
react hooks 的useState:
React 的 useState Hook 是一种用于在函数组件中管理状态的机制。它可以让函数组件具有类似于类组件的状态管理能力。 useState Hook 接收一个初始值作为参数,并返回一个包含状态值和更新状态值的数组。 import { useState } from react;const [state, setState] …...

编程那么难,为什么不弄一个大众一学就会的计算机语言呢?
大家好!今天要和大家聊聊一个有趣的想法: 想象一下,如果编程变得像拼乐高积木一样简单,那将是多么美妙的事情啊!不需要费尽心思去学习繁杂的语法规则和复杂的逻辑,只需要将代码块像积木一样拼接起来&#x…...

论文阅读2---多线激光lidar内参标定原理
前言:该论文介绍多线激光lidar的标定内参的原理,有兴趣的,可研读原论文。 1、标定参数 rotCorrection:旋转修正角,每束激光的方位角偏移(与当前旋转角度的偏移,正值表示激光束逆时针旋转&…...

Ubuntu 22.04 apt 安装 ros1 ros Noetic Ninjemys
众所周知 ros2还有很多功能没有移植,而ros1官方不再支持 ubuntu 20.04 之后的版本。另一方面Ubuntu 22.04 更新了很多对新硬件的驱动,有更好的兼容性和体验,这就变的很纠结。 如果想在 22.04 使用最新版本的 ros noetic 只有自己编译一个办法…...

单片机学习笔记---矩阵键盘
目录 矩阵键盘的介绍 独立按键和矩阵按键的相同之处: 矩阵按键的扫描 代码演示 代码模块化移植 Keil自定义模板步骤: 代码编写 矩阵键盘就是开发板上右下角的这个模块 这一节的代码是基于上一节讲的LCD1602液晶显示屏驱动代码进行的 矩阵键盘的介…...

第八篇 交叉编译华为云Iot SDK到Orangepi3B
本篇主要内容: 一、交叉编译华为云Iot SDK依赖1.宿主机安装交叉编译工具链(1)选择下载交叉编译工具链(2)解压、添加环境变量、重启2.交叉编译依赖库(0) 准备工作(1) 交叉…...
软件工程测试2
1.【单选】“数据流的分解一般达到2层数据流就截止”的说法是否正确 A. 正确 B. 错误 答案:B 2.【单选】 在类图中,哪种关系表达总体与局部的关系 A. 泛化 B. 实现 C. 聚合 D. 依赖 答案:C 3.【多选】从UML时序图中我们能够得到(…...
31.【TypeScript 教程】混入(Mixins)
TypeScript 混入(Mixins) 混入(Mixins)是面向对象编程中的一个比较重要的概念。本节将会通过一个实例逐步介绍混入是如何在 TypeScript 中使用的。 1. 解释 在 TypeScript 中,可以根据不同的功能定义多个可复用的类,它们将作为 …...
C语言常见面试题:什么是联合体,联合体的作用是什么?
联合体(union)是一种特殊的数据类型,它可以在同一块内存单元中存储不同的数据类型。联合体的作用在于能够节省内存空间,并且可以用来实现数据的共享和交换。 联合体的定义方式是在C语言中通过关键字union来定义,例如&…...

Nginx进阶篇【五】
Nginx进阶篇【五】 八、Nginx实现服务器端集群搭建8.1.Nginx与Tomcat部署8.1.1.环境准备(Tomcat)8.1.1.1.浏览器访问:8.1.1.2.获取动态资源的链接地址:8.1.1.3.在Centos上准备一个Tomcat作为后台web服务器8.1.1.4.准备一个web项目,将其打包为war8.1.1.5.启动tomcat进…...

IndexedDB
Web SQL Database | Can I use... Support tables for HTML5, CSS3, etc IndexedDB | Can I use... Support tables for HTML5, CSS3, etc 为什么websql被废弃?_笔记大全_设计学院 WebSQL有兼容、性能、安全问题,要考虑使用IndexedDB替代。 一文看懂 In…...

git用法总结
以gitee为例,GitHub也可参考本文 创建远程仓库 在自己的gitee主页 创建本地仓库 在文件夹下,右键→git bash here git init添加gitignore vi .gitignoregitignore里的内容根据自己实际情况设置,这里举个例子 # #开头的是注释 # Prer…...

统计学-R语言-7.3
文章目录 前言总体方差的检验一个总体方差的检验两个总体方差比的检验 非参数检验总体分布的检验正态性检验的图示法Shapiro-Wilk和K-S正态性检验总体位置参数的检验 练习 前言 本篇文章继续对总体方差的检验进行介绍。 总体方差的检验 一个总体方差的检验 在生产和生活的许多…...

在Idea中使用git查看历史版本
idea查git历史 背景查看步骤总结 背景 有好几次同事到我电脑用idea查看git管理的历史记录,每次都说我的idea看不了历史版本,叫我到他电脑上去看,很晕,为什么,原来是我自己把显示历史文件的视图覆盖了,下面我们来一起学…...
书籍 - 《华杉讲透孙子兵法》 - 11
第十章 地形第十 六种地形的用兵之道(一):先占有利地形 我们读兵法,会发现很多时候,等待都是最好的策略。你一定要懂得等,等得起。有的人不能等,总以为等待就是不作为,那就容易“胡作…...
2024 axios封装 包括请求拦截、错误码等
1.新建 codeMessage.ts export default {200: "服务器成功返回请求的数据。",201: "新建或修改数据成功。",202: "一个请求已经进入后台排队(异步任务)。",204: "删除数据成功。",400: "发出的请求有错误…...

Kotlin Multiplatform项目推荐 | 太空人分布图
Kotlin Multiplatform项目推荐 | 太空人分布图 项目简介 Kotlin Multiplatform项目是一种跨平台开发技术,它可以同时使用SwiftUI、Jetpack Compose、Compose for Wear OS、Compose for Desktop、Compose for Web、Kotlin/JS React等客户端框架,并且使…...

使用Opencv-python库读取图像、本地视频和摄像头实时数据
使用Opencv-python库读取图像、本地视频和摄像头实时数据 Python中使用OpenCV读取图像、本地视频和摄像头数据很简单, 首先需要安装Python,然后安装Opencv-python库 pip install opencv-python然后在PyCharm或者VScode等IDE中输入对应的Python代码 一…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...

stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...