nodejs的包管理工具npm、yarn等使用指南

  • 名词解析:
    • package => 代码模块,这里指 npm package

前言

本文主要讲述 nodejs 下的 node 版本管理工具和模块管理工具。

随着时间的推移,后续会总结常用工具,如:yarn、npm、npx、nrm、pnpm 等等在实践过程中碰过的问题。

nodejs 的包管理工具

npm(node package manager)简单的说是一个面向 nodejs 的包管理工具。其包的结构使您能够轻松跟踪依赖项和版本,使用 npm 可以轻松发布包、下载包。

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

  • 托管 package 的网站,用于查找、发布和配置 package。
  • 注册表(registry)。储存 package 详细信息 的数据库
  • cli(开发者操作使用的工具)

nodejs 默认内置 npm,只需要按照好 nodejs 则可正常使用 npm。

在 npm@v5.2.0 开始引入了 npx,npx 是 npm 的一个包执行器,npx 提高从 npm 注册表使用软件包的体验。

另外 nodejs 常用的包管理工具还有 yarn、pnpm

Install

Install yarn

在 window 端 yarn 版本通过下载软件安装,下载地址

也可以通过 cli 下载 yarn,可查看教程 https://yarn.bootcss.com/docs/install#mac-rc

# window
npm install --global yarn

# Ubuntu/Debain
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ rc main" | sudo tee /etc/apt/sources.list.d/yarn.list

# CentOS/MacOs
curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --rc

Install pnpm

pnpm 详细安装教程请前往官网https://yarn.bootcss.com/docs/install

  • 通过 npm 安装
npm install -g pnpm@next
  • 通过脚本安装
# POSIX 类系统
curl -fsSL https://get.pnpm.io/install.sh | PNPM_VERSION=7.0.0-beta.2 sh -

# 如果没有安装 curl,可以使用 wget:
wget -qO- https://get.pnpm.io/install.sh | PNPM_VERSION=7.0.0-beta.2 sh -

# 在 Windows 系统上(PowerShell
$env:PNPM_VERSION='7.0.0-beta.2' ; iwr https://get.pnpm.io/install.ps1 -useb | iex

Usage

Usage Cli

nodejs 模块包中有可执行的 cli 工具。cli 工具包的运行方式有 2 钟:

  1. 通过全局安装工具包,系统自动生成可直接运行的快捷方式。
# 全局安装
npm install -g <cli_package>
pnpm add -g <cli_package>
yarn global add <cli_package>

# 全局cli可直接执行
<cli_package>
  1. 通过局部安装工具包,需要使用 npm 执行包运行,如 yarn、npx。
# 局部安装
npm install <cli_package>
pnpm add <cli_package>
yarn add <cli_package>

# 局部运行cli
npm run <cli_package>
npx <cli_package>
pnpm <cli_package>
yarn <cli_package>

安装包

  • 全局安装

全局安装的默认地址

# npm
npm i -g <packageName>
  • 局部安装
# npm
npm i --save  <packageName>
  • 根据参数选择安装模式:

    • npm 添加-g ,yarn 添加 global ,为全局安装
    • 添加 -D 或 --save-dev 则安装为工具包,该包不参加打包
    • 添加 -S 或 --save 则安装为依赖包, 该包参加打包工具打包
# npm、pnpm一样
npm install <packageName>
npm i <packageName>
npm i -g <packageName>

npm i -D <packageName>
npm i --save-dev <packageName>

npm i -S <packageName>
npm i --save <packageName>

#yarn
yarn global add <packageName>
yarn add <packageName>

yarn add -D <packageName>
yarn add --save-dev <packageName>

yarn add -S <packageName>
yarn add --save <packageName>

如果出现以下错误: npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

解决办法为:npm config set proxy null

初始化库步骤

# npm
npm init -y
npm install webpack --save-dev

# yarn
yarn init -y
yarn add webpack --save-dev

查看模块

  • 全局安装的所有模块
# npm
npm list -g
pnpm list --global
  • 当前文件夹安装的所有模块
# npm
npm list
pnpm list
yarn list --flat
  • 查看指定模块
# npm
npm list <packageName>
pnpm list <packageName>
yarn list <packageName>

npm 添加用户

资源库中注册用户(使用邮箱注册)

# npm
npm adduser

发布模块

# npm
npm publish --registry=https://registry.npmjs.org/

创建文件

touch

更新模块


npm 更新

# npm
npm update <packageName>

yarn 更新

  • 下载 npm-check-updates
  • yarn upgrade-interactive --latest(推荐)
  • yarn upgrade package@version
// 先下载
yarn global add npm-check-updates
// 更新包(yarn.lock和package.json同步更新)
ncu --upgrade --upgradeAll && yarn upgrade

yarn upgrade-interactive --latest
// 需要手动选择升级的依赖包,按空格键选择,a 键切换所有,i 键反选选择

yarn upgrade package@version
// yarn.lock和package.json都会更新,但是会进行版本锁定 "echarts": "4.2.0-rc.2"

pnpm 更新

# 深度更新最多100个子目录的所有包
pnpm --recursive update

# 更新typescript到每个包的最新版本
pnpm --recursive update <packageName>

卸载安装

# npm
npm uninstall <packageName>

# yarn
yarn remove <packageName>

# pnpm
pnpm remove <packageName>

搜索模块

这个命令会打开一个全屏的终端界面,你可以在这里搜索和安装 npm 注册表中的包。

# npm
npm search <packageName>

# yarn
yarn search <packageName>

配置项

注意:如果修改了全局包文件夹目录位置(如修改后为 path_gloabl[D:\npm\node_global]),则需要在电脑环境变量 Path 上添加path_gloabl

当使用 npm|yarn set config xxx xxx 后,磁盘的用户文件夹下会生成一个.npmrc|.yarnrc 的文件,以下操作或者可在文件夹:C:\Users<Administrator> 上修改文件配置.npmrc

  • 查看总配置列表
# npm
npm config ls
npm config list

# yarn
yarn config list
  • 设置配置代理

用于设置代理协议,如:socks\http 等。

因为有些包是存在 http,有些在 socks(基本默认)

因此需要在特定情况下设置代理才能顺利下载包

# npm
# 有时候再设置代理后无法下载包,则需要清空代理
npm config set proxy null

# 基本代理设置
npm config set proxy http://[ip]:[port]
npm config set https-proxy http://[ip]:[port]

# 需要认证代理设置
npm config set proxy http://username:password@server:port
npm config set https-proxy http://username:pawword@server:port

# 清除代理设置
npm config delete proxy
npm config delete https-proxy
  • 设置本地缓存文件夹和全局文件夹

在开发过程中,随着时间的推移,开发者可能会按照了很多全局包。因为全部包的默认目录一般在系统盘,因此可以跳转默认目录,也方便以后的管理。

缓存文件默认地址:C:\Users\Administrator\AppData\Roaming\npm-cache

全局包文件默认地址:C:\Users\Administrator\AppData\Roaming\npm\node_modules

npm config 允许使用 set\get 来设置或查看信息。如下:

# npm
# 设置缓存
npm config set cache "D:\npm\node_cache"
# 设置全局
npm config set prefix "D:\npm\node_global"
# 设置镜像源
npm config set registry "https://registry.npm.taobao.org"
# 查看缓存
npm config get cache
# 查看全局
npm config get prefix
# 查看镜像源
npm config get registry

# yarn
# 设置缓存
yarn config set cache "D:\npm\node_cache"
# 设置全局
yarn config set prefix "D:\npm\node_global"
# 设置镜像源
yarn config set registry "https://registry.npm.taobao.org"
# 查看缓存
yarn config get cache
# 查看全局
yarn config get prefix
# 查看镜像源
yarn config get registry

清除缓存

有时候缓存包会与安装包存在冲突,这种情况需要清除缓存处理

# npm
npm cache clean # npm@v5
npm cache verify # npm@v6

镜像设置

# npm
# 查看镜像:
npm config get registry
yarn config get registry

# 设置永久镜像,设置会被写入到.npmrc|.yarnrc文件:
npm config set registry http://registry.npm.taobao.org/
npm config set registry https://registry.npmjs.org/
yarn config set registry https://registry.npm.taobao.org/

# 设置临时镜像,只在本次命令使用
npm --registry https://registry.npm.taobao.org install <packageName>
yarn --registry https://registry.npm.taobao.org add <packageName>

  • 常用镜像源地址有:

npm --- https://registry.npmjs.org/

cnpm --- https://r.cnpmjs.org/

taobao --- https://registry.npm.taobao.org/

nj --- https://registry.nodejitsu.com/

rednpm --- https://registry.mirror.cqupt.edu.cn/

npmMirror --- https://skimdb.npmjs.com/registry/

deunpm --- http://registry.enpmjs.org/

切换镜像源地址通过上述方式进行设置与查看,也可以直接使用nrm 包来设置,下面会讲到。

  • 使用淘宝源时或者尝试 cnpm

安装 cnpm 包

# npm
npm install -g cnpm --registry=https://registry.npm.taobao.org/
cnpm install <packageName>

当使用 cnpm -v/cnpm -version 查看版本时提示“cnpm 命令提示不是内部或外部命令”

原因:本地系统没有添加 npm 模块的环境变量,所以不能识别命令。

解决: 将将全局安装目录 D:\npm\node_global 添加到环境变量

FAQ

全局包运行时报错: SecurityError: (:) [],PSSecurityException

+ CategoryInfo          : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
  • 原因:Windows 下 PowerShell 默认的权限级别是 Restricted,不允许执行 PS 脚本(即.ps1 文件)。如果在 Restricted 权限级别下运行,会得到上述错误

  • 解决:Set-ExecutionPolicy RemoteSigned -Scope process

  • 科普 window 执行策略:

#更新执行策略
Set-ExecutionPolicy <policy-name>

#policy-name可能的值
Unrestricted、RemoteSigned、AllSigned、Restricted、Default、Bypass、Undefined

#将ExecutionPolicy改为Unrestricted,可以运行未签名的脚本
Set-ExecutionPolicy Unrestricted

#查询详细策略
get-help about_Execution_Policise

node-sass 安装错误

首先要排除 node-sass 版本是否与你安装的 py2、py3 有冲突,如果没冲突则做下面操作。

排除 py 问题,一般都是国内网络不稳定的问题了。

那么我们有几种常用方法:

  1. 设置特定包的淘宝源:
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
npm config set phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
npm config set electron_mirror=https://npm.taobao.org/mirrors/electron/
npm config set registry=https://registry.npm.taobao.org

上述操作可以在使用 npm install 安装 node-sass、electron 和 phantomjs 时都能自动从淘宝源上下载。

  1. 使用 cnpm 淘宝源下载
npm install -g cnpm
cnpm install
  1. 使用 VPN
npm config set proxy (http://127.0.0.1:1080)此处是 VPN 的代理地址
npm i node-sass

#下载完成后删除 http 代理
npm config delete proxy

npm ERR! code EUNSUPPORTEDPROTOCOL. Unsupported URL Type

  • 原因: npm 版本过低

  • 解决:

# 查看 npm 版本
npm -v
# 更新版本
npm install -g npm

nrm

nrm(npm registry manager )是 npm 的镜像源管理工具,有时候国外资源太慢,那么我们可以用这个来切换镜像源。

install nrm

npm install -g nrm

Usage nrm

# 查看可使用镜像源
#   npm -------- https://registry.npmjs.org/
#   yarn ------- https://registry.yarnpkg.com/
#   cnpm ------- http://r.cnpmjs.org/
# * taobao ----- https://registry.npm.taobao.org/
#   nj --------- https://registry.nodejitsu.com/
#   npmMirror -- https://skimdb.npmjs.com/registry/
#   edunpm ----- http://registry.enpmjs.org/
nrm ls
# 切换镜像源
nrm use <url>

参考链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容