包管理工具 nvm npm nrm yarn cnpm npx pnpm详解

包管理工具 nvm npm yarn cnpm npx pnpm

npm、cnpm、yarn、pnpm、npx、nvm的区别:https://blog.csdn.net/weixin_53791978/article/details/122533843
npm、cnpm、yarn、pnpm、npx、nvm的区别:https://blog.csdn.net/weixin_53791978/article/details/122533843
包管理工具:npm、npx、yarn、cnpm、pnpm:https://blog.csdn.net/March_Q__/article/details/126675476
包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm:https://blog.csdn.net/weixin_52851967/article/details/128620143
第六节:pnpm剖析(简介、硬/软链接、实操、配置、原理:https://www.cnblogs.com/yaopengfei/p/17203131.html

1. nvm

nvm npm cnpm nrm yarn pnpm:https://www.jianshu.com/p/c62023b475a7

1.1 nvm 安装

  1. 作用
  • 进行nodejs版本控制
  1. 下载
  • https://github.com/coreybutler/nvm-windows/releases
  1. 安装
  • nvm-noinstall.zip: 这个是绿色免安装版本,但是使用之前需要配置
  • nvm-setup.zip:这是一个安装包,下载之后点击安装,无需配置就可以使用,方便。
  • Source code(zip):zip压缩的源码
  • Sourc code(tar.gz):tar.gz的源码,一般用于Linux系统

安装步骤属于傻瓜式操作,一直next就行了,在此不做截图演示,其中有一步是选择已安装的nodejs的路径

  1. 配置路径和下载源

在nvm安装路径下 setting.txt 文件中配置如下信息:

#设置nvm路径
nvm root E:\JAVA\nvm
#设置nvm路径(相当于setting.txt中的root:):
nvm node_mirror https://npm.taobao.org/mirrors/node/
#设置nodejs路径(相当于setting.txt中的path:):
nvm npm_mirror https://npm.taobao.org/mirrors/npm/
  1. 测试

在电脑命令行输入nvm出现如下信息代表安装成功

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第1张图片

  1. 常用命令
命令 说明
nvm list 查看已经安装的版本
nvm list installed 查看已经安装的版本
nvm list available 查看网络可以安装的版本
nvm arch 查看当前系统的位数和当前nodejs的位数
nvm install [arch] 安装指定版本的node 并且可以指定平台 version 版本号 arch 平台
nvm on 打开nodejs版本控制
nvm off 关闭nodejs版本控制
nvm proxy [url] 查看和设置代理
nvm node_mirror [url] 设置或者查看setting.txt中的node_mirror,如果不设置的默认是 https://nodejs.org/dist/
nvm npm_mirror [url] 设置或者查看setting.txt中的npm_mirror,如果不设置的话默认的是 https://github.com/npm/npm/archive/
nvm uninstall 卸载指定的版本
nvm use [version] [arch] 切换指定的node版本和位数
nvm root [path] 设置和查看root路径
nvm version 查看当前的版本

1.2 node npm 安装

#安装指定版本node
nvm install 14.18.0
#使用指定版本node
nvm use 14.18.0
#卸载指定版本node
nvm uninstall 14.18.0
#查看已安装的node版本
nvm list

#安装激活使用版本后查看 node 和 npm 版本
node -v
npm -v

npm配置

#查看npm配置信息
npm config list
#全局npm,修改npm的包的全局安装路径
npm config set prefix "E:\JAVA\nvm\v14.18.0"
#修改npm的包的全局cache位置
npm config set cache "E:\JAVA\nvm\v14.18.0\npm-cache"
#全局安装npm
npm install npm -g

#配置环境变量
在系统变量中添加 NPM_HOME=E:\JAVA\nvm\v14.18.0, path中添加%NPM-HOME%

#常用命令
#g全局 D开发环境 S生产环境
npm install xxx -g -D -S
#卸载依赖
npm uninstall xxx
#查看下载源
npm config get registry
#修改为taobao源
npm config set registry https://registry.npm.taobao.org

1.3 cnpm 安装

npm install -g cnpm --registry=http://r.cnpmjs.org
npm install -g cnpm --registry=https://registry.npm.taoba.org

1.4 nrm 安装

作用

  • nrm(npm registry manager )是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换
#安装(自测安装后不能使用)
npm install nrm -g
#使用
nrm ls
#bug: 不出现星号
#C:\dev\dev-tools\npm\node_modules\nrm\cli.js   && 改为 ||
if (hasOwnProperty(customRegistries, name) && (name in registries || customRegistries[name].registry === registry.registry)) {
  registry[FIELD_IS_CURRENT] = true;
  customRegistries[name] = registry;
}
if (hasOwnProperty(customRegistries, name) || (name in registries || customRegistries[name].registry === registry.registry)) {
  registry[FIELD_IS_CURRENT] = true;
  customRegistries[name] = registry;
}

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第2张图片

1.5 yarn 安装

#安装
npm install yarn -g

#查看源
yarn config get registry
#修改为taobao源
yarn config set registry https://registry.npmmirror.com

#查看配置列表
yarn config list
#查看 yarn 全局bin位置(prefix)
yarn global bin
#查看 yarn 全局安装位置(folder)
yarn global dir
#查看 yarn 全局cache位置(cache)
yarn cache dir

#改变 yarn 全局bin位置(prefix)
yarn config set prefix "C:\dev\dev-tools\npm\bin"
#改变 yarn 全局安装位置(folder)
yarn config set global-folder "C:\dev\dev-tools\yarn"
#改变 yarn 全局cache位置(cache)
yarn config set cache-folder "C:\dev\dev-tools\yarn-cache"

#初始化
yarn init

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

#安装所有的依赖包
yarn
yarn install

npm 与 yarn命令比较

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第3张图片

1.6 pnpm 安装

#安装
npm i -g pnpm
#pnpm版本
pnpm --version

#列出已缓存的每个包
pnpm cache list
#返回全局缓存位置
pnpm cache dir
#清除缓存
pnpm cache clean

#pnpm全局仓库路径(类似 .git 仓库)
pnpm config set store-dir "D:\dev\dev-tools\.pnpm-store"
#pnpm全局安装路径
pnpm config set global-dir "D:\dev\dev-tools\pnpm-global"
#pnpm全局bin路径
pnpm config set global-bin-dir "D:\dev\dev-tools\nodejs"
#pnpm创建pnpm-state.json文件的目录
pnpm config set state-dir "D:\dev\dev-tools\pnpm"
#pnpm全局缓存路径
pnpm config set cache-dir "D:\dev\dev-tools\nodejs\pnpm\cache"

#安装示例
pnpm install -g @vue/cli
pnpm install -g webpack webpack-cli
pnpm i -g nodemon
pnpm i -g concurrently

2. npm

#安装完node,cmd能运行npm,但是PowerShell无法运行 npm
get-executionpolicy
set-executionpolicy remotesigned
#查看安装了哪些
npm list --depath=0 -g

2.1 概述

  • 包管理工具npm: Node Package Manager,也就是Node包管理器;
  • 如何下载和安装npm工具呢?
  • npm属于node的一个管理工具,所以需要先安装Node;
  • node管理工具:https://nodejs.org/en/,安装Node的过程会自动安装npm工具;
  • npm管理的包可以在哪里查看、搜索呢?
    • https://www.npmjs.org/ 这是安装相关的npm包的官网;

2.2 npm install 命令

#安装某依赖包
npm install xxx
npm i xxx
#卸载某个依赖包:
npm uninstall package
#--save-dev 等同于 -D
npm uninstall package --save-dev
npm uninstall package -D

#强制重新build
npm rebuild
#清除缓存
npm cache clean

npm的命令其实是非常多的:

  • https://docs.npmjs.com/cli-documentation/cli
  • 更多的命令,可以根据需要查阅官方文档

安装npm包分两种情况:

  • 全局安装(global install)npm install webpack -g
  • 项目(局部)安装(local install):npm install webpack

全局安装

依赖包想要实现全局安装 通过指令 npm install 插件包名字 -g

这样就可以在任意层级目录下面执行插件包里面的安装了
比如全局安装yarn:npm install yarn -g

但是很多人对全局安装有一些误会:

  • 通常使用npm全局安装的包都是一些工具包:yarn、webpack等;
  • 并不是类似于 axios、express、koa等只想在项目中使用的库文件;
  • 所以全局安装了之后并不能让我们在所有的项目中使用 axios等库;

局部安装

安装在特定项目的文件夹里面

他只会将插件包放置到当前文件夹下面的node_modules里面

只有当前这个项目才能使用这个插件包,其他项目是使用不了的

局部安装又分为开发依赖和生产依赖

安装指定版本

npm i [email protected] 安装0.28.4版本的yarn

npm install 原理

很多同学之前应该已经会了 npm install ,但是你是否思考过它的内部原理呢?

  • 执行 npm install它背后帮助我们完成了什么操作?
  • 我们会发现还有一个称之为package-lock.json的文件,它的作用是什么?
  • 从npm5开始,npm支持缓存策略(来自yarn的压力),缓存有什么作用呢?

这是一幅我画出的根据 npm install 的原理图:

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第4张图片

npm install会检测是否存在package-lock.json文件:

没有lock文件

  1. 分析依赖关系,这是因为我们可能包会依赖其他的包,并且多个包之间会产生相同依赖的情况;
  2. 从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包);
  3. 获取到压缩包后会对压缩包进行缓存(从npm5开始有的);
  4. 将压缩包解压到项目的node_modules文件夹中

有lock文件

  • 检测lock中包的版本是否和package.json中一致(会按照semver版本规范检测);

不一致,那么会重新构建依赖关系,直接会走顶层的流程;

  • 一致的情况下,会去优先查找缓存

没有找到,会从registry仓库下载,直接走顶层流程;

  • 查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中;

package-lock.json

package-lock.json文件解析:

  • name:项目的名称;
  • version:项目的版本;
  • lockfileVersion:lock文件的版本;
  • requires:使用requires来跟踪模块的依赖关系;
  • dependencies:项目的依赖
  • 当前项目依赖axios,但是axios依赖follow-redireacts;
  • axios中的属性如下:
    • version表示实际安装的axios的版本;
    • resolved用来记录下载的地址,registry仓库中的位置;
    • requires/dependencies记录当前模块的依赖;
    • integrity用来从缓存中获取索引,再通过索引去获取压缩包文件;

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第5张图片

2.3 版本号管理

semver版本规范是X.Y.Z

版本号就是包名后面的一串数字

  • x.y.z
    x :主版本号(major):做了不兼容的API修改(可能不兼容之前的版本);
    y :次版本号(minor):做了向下兼容的功能性新增(新功能增加,但是兼容之前的版本);
    z :修订号(patch):做了向下兼容的问题修正(没有新功能,修复之前版本的bug);

  • ^和~的区别

    在package.json文件中,每个包后面都有相应的版本号
    x.y.z:表示一个明确的版本号;
    ^x.y.z:表示x是保持不变的,y和z永远安装最新的版本;
    ~x.y.z:表示x和y保持不变,z永远安装最新的版本;

3. npx

npx是npm5.2之后自带的一个命令

npx运用

  • npx可以说是一个比较特殊的命令,使用npx执行某个包时,它会到当前目录的node_modules/.bin目录下查找对应的命令,有的话就会调用本地的包,如果本地没有找到该包,那么它就会临时下载该包,在执行之后立即删除,好处是不占用本地存储,如果遇到一些不常用的包,就比较适合使用这个方法
  • 以yarn为例,那么如何使用项目(局部)的命令,常见的是两种方式:
    • 方式一:修改package.json中的scripts
      “scripts”: {
      “yarnstart”: “yarn --version”
      }
    • 方式二:使用npx
      npx yarn --version

4. yarn

4.1 概述

使用之前需要先安装yarn:npm install yarn -g 全局安装yarn
npm下载比较慢时,又不想更改npm下载地址 ,就可以使用yarn来进行下载其他的依赖包

注意:使用的时候不再是npm install …… 而是yarn add …… 因为他是依托于node

#下载包:
yarn add 包名
#移除包:
yarn remove 包名

#例如
#(安装到开发和生产环境dependencies)
yarn add vue 
#(安装到开发环境devDependencies)
yarn add webpack 
#(移除vue)
yarn remove vue
#(移除webpack)
yarn remove webpakc

4.2 yarn基本使用示例

  1. npm init -y 新建项目并初始化,生成package.json文件

  2. yarn add axios dayjs (包名可连写) 安装插件指令

    • 默认安装到开发和生产依赖(dependencise)
  3. 新建src文件夹,并在src里面新建main.js文件

  • 在main.js文件里面声明常量,并打印
const dayjs = require("dayjs");
console.log(dayjs);
  1. 在package.json文件里面配置指令,在"调试"的下面,有一个"scripts",配置start,后面写 node 空格 路径 注意路径不要出错
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./main.js"
},

"start": "node ./src/main.js"
  1. 在控制台运行 yarn start
  • 使用yarn start运行 等同于 node ./main.js运行,在文件夹较多,跳转路径太麻烦时,这个方法就很方便

    • “start”: “node ./main.js”
    • “start”: “node ./src./main.js”
    • “start”: “node ./aaa./main.js”
  • yarn start == yarn run start (run可以省略)

    运行结果如下

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第6张图片

  1. yarn remove 包名 -------- 删除某个包
yarn remove dayjs
yarn remove axios
#连写 
yarn remove dayjs axios

5. cnpm

5.1 概述

安装cnpm :npm i cnpm -g 全局安装

由于一些特殊的原因,某些情况下我们没办法很好的从 https://registry.npmjs.org下载下来一些需要的包,这时可以使用镜像

  • npm config get registry 查看当前下载地址
    • 默认都是国外的服务器:https://registry.npmjs.org/
  • 切换为国内的中国镜像服务器:npm config set registry https://www.npmmirror.com/
    • 切换后课用 npm config get registry 查看是否切换成功
    • 淘宝镜像:https://registry.npm.taobao.org
      淘宝镜像似乎不再维护了,建议使用中国镜像
  • 可能对于一些人来说,并不希望将npm修改为某一镜像
    • 第一,不太希望随意修改npm原本从官方下来包的渠道;
    • 第二,担心某镜像挂了或者不维护了,又要改来改去;
  • 这个时候,我们可以使用cnpm,并且将cnpm设置为中国镜像: 不改变npm的下载地址
  • 也就是说 如果我们使用npm i 包名 就是从国外官网下载安装 如果使用cnpm i 包名 就是从中国镜像服务器仓库下载插件

5.2 cnpm基本使用

#下载某个包
cnpm add 包名
#删除某个包
cnpm remove 包名
#运行配置过的文件
cnpm start

使用方法与yarn区别不大,参考yarn的使用,把yarn写成cnpm就行了

6. pnpm

中文文档:https://www.pnpm.cn/

6.1 概述

  • npm和yarn的问题

    当使用 npm 或 Yarn 时,如果你有 100 个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要保存 100 份该相同依赖包的副本。

  • pnpm运行起来非常的快,超过了npm和yarn

  • pnpm采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是yarn的最大的性能弱点之一

  • 使用链接并不容易,会带来一堆问题需要考虑。

  • pnpm继承了yarn的所有优点,包括离线模式和确定性安装

6.2 什么是pnpm?

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第7张图片

6.3 硬链接和软连接的概念

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第8张图片

6.4 硬链接和软连接的演练

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第9张图片

6.5 pnpm的原理

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第10张图片

6.6 pnpm创建非扁平的 node_modules 目录

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第11张图片

6.7 pnpm的存储store

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第12张图片

6.8 pnpm的安装和使用

#官网提供了很多种方式来安装pnpm:https://www.pnpm.cn/installation
#如果已经安装了Node,Node中有npm,所以我们通过npm安装即可;
#(全局安装pnpm)
npm install pnpm -g  
#通过 npx 安装 pnpm
npx pnpm add -g pnpm    
#一旦安装完 pnpm 之后,就无需使用其它软件包管理器来更新 pnpm 了。 你可以让 pnpm 自己来更新自己,如下所示:
pnpm add -g pnpm

#设置pnpm的磁盘存储目录
pnpm config set store-dir E:\JAVA\pnpm\.pnpm-store
#查看pnpm的安装目录
pnpm store path
#从store中删除当前未被引用的包来释放store的空间
pnpm store prune

pnpm命令类似于前面的 yarn 和 cnpm

npm命令 npnm 等价命令
npm init pnpm init
npm install pnpm install
npm install 包名 pnpm add 包名
npm install 包名 -D pnpm add 包名 -D
npm uninstall 包名 pnpm remove 包名
npm run < cmd > pnpm < cmd >

更多命令和用法可以参考pnpm的官网:https://pnpm.io/zh/

6.9 pnpm add -g pnpm报错解决

https://blog.csdn.net/zwl5670/article/details/129598244

使用pnpm的时候突然提示我的pnpm不是最新版本,提示执行“pnpm add -g pnpm”可以更新到最新版本。
然而执行“pnpm add -g pnpm”,结果出现如下提示。

ERROR  Unable to find the global bin directory
Run "pnpm setup" to create it automatically, 
or set the global-bin-dir setting, 
or the PNPM_HOME env variable. The global bin directory should be in the PATH.

执行pnpm setup依然报错。
看提示有“set the global-bin-dir setting”、“PNPM_HOME”、 “PATH”。然后进行如下设置:

  1. 在命令行中执行以下命令

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第13张图片

#pnpm全局仓库路径(类似 .git 仓库)
pnpm config set store-dir "E:\JAVA\pnpm\store"
#pnpm全局安装路径
pnpm config set global-dir "E:\JAVA\pnpm\global"
#pnpm全局bin路径
pnpm config set global-bin-dir "E:\JAVA\pnpm\global-bin"
#pnpm创建pnpm-state.json文件的目录
pnpm config set state-dir "E:\JAVA\pnpm\state"
#pnpm全局缓存路径
pnpm config set cache-dir "E:\JAVA\pnpm\cache"
  1. 在环境变量中配置。pnpm全局bin路径

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第14张图片

  1. 执行pnpm add -g pnpm,没有报错信息

  2. 执行pnpm -v 已经是最新版本了

    包管理工具 nvm npm nrm yarn cnpm npx pnpm详解_第15张图片

你可能感兴趣的:(大前端,npm,前端,node.js)