浅谈npm、yarn、cnpm、pnpm(内附网址链接)

2023-11-10

1- npm

1.1 npm简介

npm由三个独立的部分组成:

  • 网站
    • 网站是开发者查找包(package)、设置参数以及管理npm使用体验的主要途径
  • 注册表(registry)
    • 注册表是一个巨大的数据库,保存了每个包(package)的信息
  • 命令行工具(CLI)
    • CLI通过命令行或终端运行。开发者通过CLI与npm打交道

1.2 如何安装本地包

有两种方式用来安装npm包:本地安装全局安装

  • 如果你自己的模块依赖某个包,并通过 Node.jsrequire 加载,那么你应该选择本地安装,这种方式也是 npm install命令的默认行为。
  • 如果你想将包作为一个命令行工具,(比如grunt CLI),那么你应该选择全局安装

使用下面的命令来安装一个包:

npm install <package_name>

上述命令执行之后将会在目前下创建一个 node_modules 的 目录(如果不存在的话),然后将下载的包保存在这个目录下。

1.3 如何安装全局包

如果你想将其作为一个命令行工具,你应该将其安装到全局。全局包在任何目录下都可以使用这个包

  • 将包安装到全局,命令如下:
npm  install -g <package>

1.4 补充知识

npm 使用一个名为package.json的文件,用户可以通过npm install --save命令把项目里所有的依赖项保存在这个文件里

例如:运行npm install --save lodash 会将以下几行添加到 package.json文件中。

1.5 相关阅读

可参考之前写的一篇博客: npm详解
npm中文网站: npm中文网站

2- yarn(针对的是Yarn 2 版本)

2.1 yarn简介

Yarn 是一个软件包管理器,还可以作为项目管理工具。无论是小型项目还是大型单体仓库(monorepos),无论是业余爱好者,还是企业用户,Yarn都能满足需求。

代码通过 软件包(package) 的方式被共享,一个软件包里包含了所有需要共享的代码,以及一个描述软件包信息的文件 package.json(叫做 清单)

2.2 yarn安装

2.2.1 关于全局安装

Yarn 2 及更高版本应按项目管理。别担心,改变很小!只需确保首先在全局安装 Yarn 二进制文件即可,我们将使用该二进制文件来生成本地的二进制文件:

npm install -g yarn
2.2.2 按项目安装
  1. 全局安装Yarn 的最新版本:
npm install -g yarn
  1. 进入你的项目目录:
cd ~/path/to/project
  1. 运行以下命令:
yarn set version berry

“Berry” 是 Yarn 2 发布序列的代号,同时也是我们的 代码仓库 的名称!

  1. 提交新增和修改过的文件。参见 哪些文件需要被添加到 .gitignore 配置文件中?
2.2.3更新到最新版本

如果以后要将 Yarn 更新到最新版本,请运行:

yarn set version latest

Yarn 将从我们的网站下载最新的二进制文件,并将其安装在您的项目中。然后,不要忘记更新依赖项并提交更新结果!

2.3 用法

2.3.1 显示命令列表
yarn help
2.3.2 初始化一个新项目
yarn init
2.3.3 安装所有依赖项
yarn
yarn install
2.3.4 添加依赖项
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
2.3.5 将依赖项添加到不同的依赖类别中
yarn add [package] --dev #dev dependencies
yarn add[package] --peer #peer dependencies
2.3.6 更新依赖项
yarn up [package]
yarn up [package]@[version]
yarn up [package]@[tag]
2.3.7 删除依赖项
yarn remove [package]
2.3.8 更新Yarn 本体
yarn set version latest
yarn set version from sources

2.4 可参考中文文档

更多内容可参考 yarn中文文档

3- cnpm

3.1 cnpm 简介

cnpm 是阿里巴巴推出的包管理工具,安装之后默认会使用 https://registry.npmmirror.com 这个镜像源。
它的安装命令和 npm 基本一致,通过 cnpm i 或者 cnpm install 命令来安装插件,当然在使用 `cnpm 前必须先通过npm安装

3.2 安装

3.2.1 全局安装
npm install -g cnpm
3.2.2 国内安装 China mirror
$ npm install cnpm -g --registry=https://registry.npm.taobao.org

支持所有npm 命令

3.2.3 同步包
$ cnpm sync [moduleName]
3.2.4 查看包文件
$ cnpm doc [name]
$ cnpm doc -g [name] # open git web url directly
3.2.5 构建私有 npm
$ npm install cnpm -g

# then alias it
$ alias mynpm='cnpm --registry=http://registry.npm.example.com \
  --registryweb=http://npm.example.com \
  --userconfig=$HOME/.mynpmrc'

3.3 注意

cnpm 不生成 lock 文件,也不会识别项目中的lock文件,如果是多人开发,还是建议使用npm或者其他包管理工具安装插件

4- pnpm

4.1 pnpm 简介

快速
pnpm是同类工具速度的奖金2倍

高效
node_modules中的所有文件均链接自单一存储位置

支持单体仓库
pnpm 内置了对单个源码仓库中包含多个软件包的支持

权限严格
pnpm 创建的 node_modules 默认并非扁平结构,因此代码无法对任意软件包进行访问

4.2 安装

4.2.1 使用npm
npm install -g pnpm
4.2.2 使用Homebrew 安装pnpm

如果你已经安装了 Homebrew 软件包管理器,则可以使用如下命令赖安装 pnpm:

brew install pnpm
4.2.3 使用Scoop 安装pnpm

如果你已经安装了 Scoop,就可以通过一下命令安装 pnpm:

scoop install nodejs-lts pnpm
4.2.4 兼容性

以下列表列出了以往的 pnpm 版本和对应支持的 Node.js 版本
在这里插入图片描述

4.3 用法

4.3.1 pnpm CLI

与npm 的差异:

与 npm 不同,pnpm 会验证所有参数。例如,pnpm install --target_arch x64 将运行 失败,由于 --target_arch 不是一个有效的 pnpm install 参数。

但是,某些依赖项可能会使用以 npm_config_ 开头的环境变量,该环境变量 是可以通过 CLI 参数添加的。在这种情况下,假定有如下参数:

  1. 直接设置环境变量:npm_config_target_arch=x64 pnpm install
  2. 利用 --config. 前缀强制设置参数:pnpm install --config.target_arch=x64
4.3.2 命令

以下 是一个与 npm 等价命令的对照表,帮助你快速入门:

npm命令 pnpm等价命令
npm install pnpm install
npm i < pkg > pnpm add < pkg >
npm run < cmd > pnpm < cmd >

当你使用一个未知命令时,pnpm 将会查找和该命令具有相同名称的脚本, 因此,pnpm run lintpnpm lint 是一样的。如果没有相同名称的脚本的话, 那么 pnpm 将按照 shell 脚本的形式执行该命令,所以你可以执行类似 pnpm eslint (see pnpm exec) 指令的命令。

4.2 可参考中文文档

以下列举几个常用内容,全部用法可参考 pnpm中文网

5- 总结

npm、yarn、cnpm、pnpm这四个都可以使用,看自己具体情况,具体使用,切记不要一块使用,各有利弊,各人选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈npm、yarn、cnpm、pnpm(内附网址链接) 的相关文章

  • 如何避免阻塞node.js中的主线程?

    当使用 Node js 编写 Web 服务器应用程序时 永远不要阻塞主线程当然非常重要 但是 如果服务器请求需要进行需要一些时间才能完成的计算怎么办 会做一个 setTimeout myCalculationFunc 0 是保持服务器响应其
  • 如何使用npm安装本地网络中的所有节点模块?

    我的节点应用程序将部署在无法访问互联网的银行中 我可以将所有节点模块下载到本地目录中并从中安装它们 还是将node modules复制到银行机器上 任何安全实用的建议将不胜感激 谢谢 OR 如何添加node modules不使用依赖项int
  • 切换活动链接 Bootstrap 导航栏

    我读过很多关于这个主题的帖子 发现几乎总是相同的解决方案 但它对我不起作用 我的问题如下 我想使用 Twitter Bootstrap 2 3 2 及其导航栏 因此我包含了 css 和 js 文件 在此之前 我还包括 jquery 然后我举
  • 页脚的内容似乎不起作用

    我正在尝试创建自定义页脚 例如 phantomjs 示例 https github com ariya phantomjs blob master examples printheaderfooter js https github com
  • 服务器发现和监控引擎已弃用

    我在 Node js 应用程序中使用 Mongoose 这是我的配置 mongoose connect process env MONGO URI useNewUrlParser true useUnifiedTopology true u
  • 身份验证在不应该返回“401(未经授权)”时返回

    我第一次设置身份验证功能 在用户登录后得到了一些意外的结果 一位同事给了我一个具有工作身份验证的应用程序 以模仿我的应用程序 看起来我所做的一切都是正确的 我在前端使用 AngularJS 在后端框架使用 SailsJS 并且护照JS ht
  • 如何将 nartc/automapper 中的配置文件使用到 Nestjs 应用程序中

    我正在尝试在 NestJS 项目内的 nartc automapper lib 中使用 AutoMapper for nodejs 但是在尝试使用配置文件功能时遇到了麻烦 这是我的配置 应用程序模块 Module imports Autom
  • 在 Node.js 中生成带条形码的 pdf

    我在用https github com devongovett pdfkit https github com devongovett pdfkit生成 PDF 文件 我可以简单地使用类似的方法 app get get pdf req re
  • 在节点环境中存根 jQuery.ajax (jQuery 2.x)

    我正在尝试运行一些需要存根的测试jQuery ajax 我正在使用 SinonJS 来做到这一点 它曾经与旧版本的 jQuery 1 x 一起工作得很好 var require jquery var sinon require sinon
  • Firebase + Node.js:错误:找不到 XMLHttpRequest 兼容性库

    Firebase Node js On iOS 安装的 Node js npm 安装 firebase save 节点测试 js 其中 test js 是一个非常简单的连接到 Firebase 的脚本 var firebase requir
  • 错误:键 $conditionalHandlers 不得以 '$' mongodb 开头

    我对 mongodb 特别是 Node js 的 mongoose 包有疑问 我有以下架构 var Schema mongoose Schema var location new Schema nomville type String re
  • ExpressJS 将变量传递给 JavaScript

    我对此完全迷失了 我正在使用 NodeJS 获取 JSON 我需要将变量传递到我的页面并让 JavaScript 使用数据 app get test function req res res render testPage myVar My
  • 为 MongoDB 中的对象数组建立索引

    我有一个巨大的电子邮件转储 我正在尝试在 MongoDB 中存储和查询它 有 160 万封电子邮件 每封电子邮件都存储为节点模块 https github com andris9 mailparser它将原始电子邮件解析为漂亮的 Javas
  • mocha.opts 已弃用,如何迁移到 package.json?

    我正在开发一个大型项目 自从上周我更新了摩卡以来 现在我们收到警告 DeprecationWarning 通过 mocha opts 进行的配置已被弃用并且 将从 Mocha 的未来版本中删除 使用 RC 文件或 改为 package js
  • npm WARN 已弃用 [email protected]:改用 uuid 模块

    当我尝试时 npm install g cordova latest总是得到npm 警告已弃用 电子邮件受保护 cdn cgi l email protection 使用 uuid 模块代替 mac 操作系统塞拉利昂 10 12npm v
  • 无法从 bash 脚本使用 nvm

    我正在尝试编写一个 shell 脚本来自动设置我的开发环境 安装 python nvm node mongo 等 我正在使用 nvm 来安装 Node js 它告诉您关闭并重新打开终端以开始使用 nmv 命令 我尝试获取 bashrc 和
  • 如何使用 Node.js 解析 JSON? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我应该如何使用 Node js 解析 JSON 是否有一些模块可以安全地验证和解析 JSON 你可以简单地使用JSON parse h
  • 如何获取从 Express (Node.js) 中的表单传递的数据

    我想获取使用表单从页面传递的数据 并在重定向的页面中使用该数据 我的客户端有这个表格
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • Node.js 上的 Connect 出现“无法 GET /”

    我正在尝试使用以下方式开始提供一些静态网页connect像这样 var connect require connect var nowjs require now var io require socket io var app conne

随机推荐

  • beyond compare破解方法

    BeyondCompare4相关操作 1 修改文件C Program Files Beyond Compare 4 BCUnrar dll 这个文件重命名或者直接删除 2 将以下操作保存为bat文件 然后双击运行即可 reg delete
  • java多态-对象多态

    对象多态 动态绑定 动态连接 package com leoworld polymorphism 多态的成员访问特点 A 成员变量 编译看左边 运行看左边 B 成员方法 编译看左边 运行看右边 为什么呢 因为成员方法有重写 而变量没有 C
  • 计算机dvd驱动错误,修正:一个错误发生在弹出的CD/DVD驱动器在Windows 10

    如果您使用的是可移动媒体 比如DVD或USB驱动器 有时您可能会在从系统中删除或弹出它时遇到麻烦 通常 Windows会拒绝当前正在使用的驱动器的请求 这意味着你应该首先关闭程序 应用程序 进程使用驱动器上的内容 然后你应该继续试着弹出驱动
  • 【Software Engineering】【期末复习知识点】【2023春】【仅供参考】

    文章目录 类型 总分占比 出勤 10 平时作业 2 5 10 期中考试 10 期末考试 70 附加分 提问加分 题型 题量 分值 预测 选择 15 2 填空 5 2 软件工程方法学 名词解释 5 2 软件危机 软件生命周期 简答 3 5 综
  • html中表单form的语法结构以及释义

    1 form属性
  • Redis command timed out nested exception is io.lettuce.core.RedisCommandTimeoutException

    报错如下 ERROR org springframework dao QueryTimeoutException Redis command timed out nested exception is io lettuce core Red
  • CSS3 2D转换之位移(translate)、旋转(rotate)、缩放(scale)以及设置旋转和缩放的中心点

    2D转换概述 2D转换可以实现元素的位移 旋转 缩放等效果 2D转换的分类有 移动 translate 旋转 rotate 缩放 scale 2D转换之translate 2D移动translate可以改变元素在页面中的位置 类似定位 移动
  • Eigen:C++中Eigen库的安装与学习

    1 下载地址 http eigen tuxfamily org index php title Main Page 进入上边官方网站进行下载如下所示 找到自己需要的版本下载即可 我下载的是3 3 8 右边的zip 2 解压配置即可 找到你下
  • Kafka配置与使用

    Kafka依赖于zookeeper 因此先配置zookeeeper zookeeper配置 修改 opt bigdata zookeeper conf zoo cfg dataDir data zookeeper 配置zookeeper数据
  • Java实现通过证书访问Https请求

    创建证书管理器类 import java io FileInputStream import java security KeyStore import java security cert CertificateException imp
  • 记录-常见算法的收集

    1 快速排序 找到基准点的位置 既不浪费空间又可以快一点的排序算法 如 6 1 2 7 9 3 4 5 10 8 这10个数进行排序 首先找到一个数作为基准点 一个参照数 为了方便 让第一个数6作为基准点 然后将这个序列中所有比基准数大的数
  • JQ工具2

    JQ工具2 开发工具与关键技术 VS JQ 作者 唐文坚 撰写时间 2020 10 17 jQuery extend deep target object1 objectN 概述 用一个或多个其他对象来扩展一个对象 返回被扩展的对象 如果不
  • C语言经典100例题(47)--宏#define命令练习(2)

    目录 题目 问题分析 代码 运行结果 题目 宏 define命令练习 2 问题分析 如果我们在 define的宏定义的内容过长时 我们的编译器中一行放不下 我们还可以加入续行符 也就是 来进行换行 是否一定需要使用换行符呢 答案是肯定的 如
  • 数组中最大最小值(C语言实现)

    题目描述 从键盘输入n n从键盘输入 n lt 100 个数存放在数组中 输出其中的最大数和最小数及他们对应的下标 输入说明 输入包含2行 第一行只有1个数字表示n 第二行有连续n个数字 其间用半角空格间隔 输出说明 输出只有1行 顺次输出
  • 快速排序及sort的理解

    快速排序 快速排序的思想 1 在数据集中 选择一个元素作为 基准 2 所有小于 基准 的元素都移动到 基准 左边 所有大于 基准 的元素都移动到 基准 右边 3 对 基准 左右两边的子集 递归地重复 1 和 2 直到所有子集的长度都只有1个
  • 按位非‘~’符号的使用

    所谓的按位非就是在数字前加上 的符号 最简单的记忆方法是 a a 1 let a 1 let b a b 2 let a 2 let b a b 3 let a 1 let b a b 0 使用场景 在if判断的时候 if在0的情况下的转换
  • C3-Squid-access.log

    C3 Squid access log 拓扑 DNS 10 0 100 71 Haproxy 10 0 100 82 Squid 10 0 100 72 73 Nginx 10 0 100 75 76 NFS 10 0 100 70 DNS
  • ASP.NET 中得到网站绝对路径的几种方法

    在编写 ASP NET 应用程序的时候 有时为了更好地进行控制静态文件的路径 如在模板页或者用户控件中设置js或者css文件的路径等 采用绝对路径是难免的 下面就是几种获取绝对路径的几种方法 C 代码 VirtualPathUtility
  • SVN学习笔记 .

    转载自 http blog csdn net tengbaichuan article details 10632349 参考文档 官方文档 http www subversion org cn svnbook 包括可下载的PDF 和一页H
  • 浅谈npm、yarn、cnpm、pnpm(内附网址链接)

    1 npm 1 1 npm简介 npm由三个独立的部分组成 网站 网站是开发者查找包 package 设置参数以及管理npm使用体验的主要途径 注册表 registry 注册表是一个巨大的数据库 保存了每个包 package 的信息 命令行