- 名词解析:
- package => 代码模块,这里指 npm package
前言
本文主要讲述 nodejs 下的 node 版本管理工具和模块管理工具。
随着时间的推移,后续会总结常用工具,如:yarn、npm、npx、nrm、pnpm 等等在实践过程中碰过的问题。
nodejs 的包管理工具
npm(node package manager)简单的说是一个面向 nodejs 的包管理工具。其包的结构使您能够轻松跟踪依赖项和版本,使用 npm 可以轻松发布包、下载包。
npm 由三个独立的部分组成,
- 托管 package 的网站,用于查找、发布和配置 package。
- npm: https://www.npmjs.com/
- yarn: https://yarnpkg.com/
- 注册表(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 钟:
- 通过全局安装工具包,系统自动生成可直接运行的快捷方式。
# 全局安装
npm install -g <cli_package>
pnpm add -g <cli_package>
yarn global add <cli_package>
# 全局cli可直接执行
<cli_package>
- 通过局部安装工具包,需要使用 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 问题,一般都是国内网络不稳定的问题了。
那么我们有几种常用方法:
- 设置特定包的淘宝源:
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 时都能自动从淘宝源上下载。
- 使用 cnpm 淘宝源下载
npm install -g cnpm
cnpm install
- 使用 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>