管理器
npm包管理器
yarn
- 安装:
corepack enable
(Corepack
是Node.js 默认附带的工具,会将yarn
二进制文件添加到PATH)
npm
npm(Node Package Manager)是Node.js的默认包管理器。npm是用于安装、升级、删除和管理JavaScript包的工具,这些包可以是库、插件、框架或应用程序。
npm link
问题记录:npm link A,npm unlink A后,npm install A还是显示link的包
卸载 npm 链接的全局软件包:npm rm | uninstall --global packageName
info
yalc
node_modules
文件夹出现.staging
tip
npm install 过程中,node_modules
里面出现了一个 .staging
文件夹,这表明我们的依赖还没有下载完成,当依赖彻底下载完之后,该文件夹会自动消失。
如果install完还是只有.staging
文件夹,则需要删除package-lock.json
文件,删除node_modules
文件夹,然后重新 npm install
。
npm install
安装1.0中的最新版本: npm install packageName@1
npm update
npm home
查看npm包的主页
npm镜像管理
使用nnrm
切换npm镜像:
npm install -g nnrm
nrm ls
查看所有的npm镜像nrm use taobao
切换npm镜像为taobaonnrm add <registry name> <registry url>
增加npm镜像
npm version
用于更新 package.json
文件中的 "version" 字段,并且可以选择性地创建一个新的 Git commit 和 tag。这个命令通常在准备发布一个新版本的 npm 包时使用。
使用 npm version
命令时,你可以指定一个新的版本号,或者使用关键字来自动更新版本号:
patch
- 增加补丁版本号 (0.0.x)minor
- 增加次版本号 (0.x.0)major
- 增加主版本号 (x.0.0)prepatch
- 增加一个预发布的补丁版本号preminor
- 增加一个预发布的次版本号premajor
- 增加一个预发布的主版本号prerelease
- 增加一个预发布版本号
此外,npm version 命令还有一些有用的选项:
--no-git-tag-version
- 更新版本号但不创建 Git commit 或 tag--commit-hooks
- 在创建 Git commit 时运行钩子 (默认为 true)--git-tag-version
- 创建 Git commit 和 tag (默认为 true)--sign-git-tag
- 使用 GPG 签名 Git tag--force
- 强制创建 Git tag,即使当前 Git 工作目录不干净
npm发布
- 切换到npm源
- npm login
- npm publish
warning
个人想发布包的名字为@scopeName/package-name
的话,需要注意2点:
scopeName
应为个人npm的账户名- 发布应使用
npm publish --access public
npm owner
npm owner add <user> [<@scope>/]<pkg> # 添加包维护者,包维护者才有发布该包的权限
npm owner rm <user> [<@scope>/]<pkg>
npm owner ls [<@scope>/]<pkg>
aliases: author
npx
npx 是 npm5.2.0版本新增的一个工具包,从本地或远程 npm 包运行命令,相比 npm,npx 会自动安装依赖包并执行某个命令。
npm自带npx,可以直接使用,如果没有可以手动安装一下:npm i -g npx
npx和npm的区别
- npx侧重于执行命令的,执行某个模块命令。虽然会自动安装模块,但是重在执行某个命令。
- npm侧重于安装或者卸载某个模块的。重在安装,并不具备执行某个模块的功能。
假如我们要用 create-react-app 脚手架创建一个 react 项目,常规的做法是先安装 create-react-app,然后才能使用 create-react-app 执行命令进行项目创建。
npm i -g create-react-app
create-react-app my-react-app
有了 npx 后,我们可以省略安装 create-react-app 这一步。
npx create-react-app my-react-app
npx工作方式
npx 会在当前目录下的./node_modules/.bin
里去查找是否有可执行的命令,没有找到的话再从全局里查找是否有安装对应的模块,全局也没有的话就会自动下载对应的模块,如上面的 create-react-app,npx 会将 create-react-app 下载到一个临时目录,用完即删,不会占用本地资源。
npx命令参数
--no-install
:不要自动下载,也就意味着如果本地没有该模块则无法执行后续的命令。npx --no-install create-react-app my-react-app
## not found: create-react-app--ignore-existing
:忽略本地已经存在的模块,每次都去执行下载操作,也就是每次都会下载安装临时模块并在用完后删除。-p
:可以指定某一个版本进行安装。-p
还可以用于同时安装多个模块。# 指定某一个版本进行安装
npx -p node@12.0.0 node index.js
# 同时安装多个模块
npx -p lolcatjs -p cowsay [command]-c
:所有命令都用npx解释。npx -p lolcatjs -p cowsay 'cowsay hello | lolcatjs'
# 上面这样运行会报错
# 因为第一项命令cowsay hello默认有npx解释,但第二项命令localcatjs会有shell解释,
# 此时lolcatjs并没有全局安装,所有就报错了。
# 这时候可以用-c参数来解决
npx -p lolcatjs -p cowsay -c 'cowsay hello | lolcatjs'-pm
: 用于指定要使用的包管理器npx create-nx-workspace --pm pnpm
pnpm
pnpm 是一个快速、节省磁盘空间的包管理工具,它使用硬链接和符号链接来节省磁盘空间并提高性能。
pnpm add
使用pnpm add --save-peer <pkg>
将安装依赖到 peerDependencies 和 devDependencies
pnpm create
从 create-*
或 @foo/create-*
starter工具包创建项目。
使用pnpm create react-app my-app
报错:No package.json (or package.yaml, or package.json5) was found
,解决办法:npx pnpm install --global pnpm
工作空间(Workspace)
pnpm 内置了对单一存储库(也称为多包存储库、多项目存储库或单体存储库)的支持, 你可以创建一个 workspace 以将多个项目合并到一个仓库中。
一个 workspace 的根目录下必须有 pnpm-workspace.yaml
文件,这个文件列出了工作区中包的位置,使得 pnpm 能够识别并链接这些包之间的本地依赖关系。
pnpm-workspace.yaml
文件示例:
packages:
- "packages/*"
使用 pnpm 工作区的好处包括:
共享依赖项:工作区中的所有包可以共享相同的依赖项,这样可以节省磁盘空间并加快安装速度。
联合构建和测试:可以一次性构建、测试或发布工作区中的所有包,这使得跨包的协作更加容易。
本地链接:pnpm 会自动处理工作区中包之间的依赖关系,通过本地链接而不是下载已经存在于工作区中的包。
-w, --workspace-root
如果项目根目录下有pnpm-workspace.yaml
文件,当执行pnpm命令时会提示,命令将在工作空间的根目录中执行(即 pnpm-workspace.yaml
文件 所在的目录)。使用 --ignore-workspace-root-check
将不再提示。
使用-w
或者--workspace-root
则代表pnpm命令将在工作空间的根目录中执行。
在packages
目录下的子package中安装依赖,除了进入子package目录直接安装pnpm add pkgname
之外,还可以通过过滤参数 --filter
或-F
指定命令作用范围。
比如,在packages
目录下新建两个子package,分别为tools
和mini-cli
,要在min-cli
包下安装react
,那么可以执行以下命令:
pnpm --filter mini-cli add react
tip
注意,--filter
或者-F
后面跟的是包的package.json
的name
,而不是包的目录名
pnpm run -r <script>
pnpm run -r <script>
命令用于在工作区中的所有包上递归运行指定的脚本。这个命令非常适合在 monorepo 项目中使用,因为它可以在所有子包中运行相同的脚本。
假设你有一个 monorepo 项目,结构如下:
my-monorepo/
├── package.json
├── packages/
│ ├── package-a/
│ │ ├── package.json
│ │ └── index.js
│ └── package-b/
│ ├── package.json
│ └── index.js
在根目录的 package.json
中,你可以定义工作区:
{
"name": "my-monorepo",
"version": "1.0.0",
"private": true,
"workspaces": [
"packages/*"
],
"devDependencies": {
"pnpm": "^6.0.0"
}
}
在每个子包的 package.json
中,你可以定义脚本。例如,在 packages/package-a/package.json
中:
{
"name": "package-a",
"version": "1.0.0",
"scripts": {
"build": "echo Building package-a"
}
}
在 packages/package-b/package.json
中:
{
"name": "package-b",
"version": "1.0.0",
"scripts": {
"build": "echo Building package-b"
}
}
你可以在根目录中运行 pnpm run -r <script>
来递归运行脚本。例如:
pnpm run -r build
这个命令将会在 packages/package-a
和 packages/package-b
中运行 build
脚本,输出如下:
> package-a:build
> echo Building package-a
Building package-a
> package-b:build
> echo Building package-b
Building package-b
pnpm run -r
命令还支持一些其他选项:
--filter
:只在匹配的包上运行脚本。例如,只在package-a
上运行脚本:pnpm run -r --filter package-a build
--parallel
:并行运行脚本,而不是按顺序运行:pnpm run -r --parallel build
--stream
:实时输出每个包的日志:pnpm run -r --stream build
通过这些选项,你可以更灵活地控制在 monorepo 项目中运行脚本的方式。
pnpm exec
pnpm exec
和 npx
都是用于执行本地安装的命令行工具的命令,但它们有一些关键的区别。
npx
是 npm
包管理器的一部分,用于执行本地或远程安装的命令行工具。它在 npm
版本 5.2.0 中引入,并在 npm
版本 7 中成为一个独立的包。
npx
的特点:
- 执行本地安装的工具:
npx
可以执行项目中本地安装的命令行工具,而无需全局安装。 - 临时安装工具:如果命令行工具未在本地安装,
npx
会临时下载并执行它。 - 简化命令:
npx
可以简化一些常见的命令行操作,例如运行脚本或工具。
# 执行本地安装的工具
npx eslint .
# 临时安装并执行工具
npx create-react-app my-app
pnpm exec
是 pnpm
包管理器的一部分,用于执行本地安装的命令行工具。它类似于 npx
,但专门为 pnpm
生态系统设计。
pnpm exec
的特点
- 执行本地安装的工具:
pnpm exec
可以执行项目中本地安装的命令行工具,而无需全局安装。 - 依赖于 pnpm:
pnpm exec
只能用于使用pnpm
管理依赖的项目。 - 不支持临时安装:与
npx
不同,pnpm exec
不会临时下载并执行未安装的工具。
# 执行本地安装的工具
pnpm exec eslint .
# 使用 pnpm exec 运行脚本
pnpm exec jest
主要区别:
包管理器:
npx
是npm
的一部分,可以用于任何使用npm
或yarn
管理依赖的项目。pnpm exec
是pnpm
的一部分,只能用于使用pnpm
管理依赖的项目。
临时安装:
npx
可以临时下载并执行未安装的命令行工具。pnpm exec
不支持临时安装工具,只能执行已经安装的工具。
性能和磁盘空间:
pnpm
通过硬链接和去重技术,通常比npm
和yarn
更节省磁盘空间和安装时间。npx
的临时安装功能可能会增加网络请求和安装时间。
bun
node.js版本管理器
fnm
tip
🚀 Fast and simple Node.js version manager, built in Rust
brew install fnm
- 在终端执行以下命令:
eval "$(fnm env --use-on-cd)"
- 在vscode的terminal执行以下命令:
eval "$(fnm env --use-on-cd)"
fnm -h
fnm -V
fnm list
(fnm ls
)fnm install
fnm install 14.14.0
fnm install 16.16.0
fnm use
fnm use 14.14.0
fnm use a2
fnm alias
fnm alias 16.16.0 a1
fnm alias 14.14.0 a2
fnm unalias
n
npm install -g n
或者brew install n
- 查看使用n安装的列表---
n
或者n ls
- 安装---
n <version>
n lts
- 切换---
n run <version>
run的别名有use、as
nvm
nvm is a popular way to run Node.js.
安装及配置
brew install nvm
mkdir ~/.nvm
open -e ~/.zshrc
然后把如下配置写进去
export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion
- 更新配置
source ~/.zshrc
- 如果是在vscode的terminal操作的如上步骤,则terminal需要关闭再打开
info
nvm-windows 安装后查看nvm环境变量,默认安装后会自动添加环境变量及path,安装后重启电脑则生效。
常用命令
nvm install <version>
nvm uninstall <version>
卸载制定的版本nvm use <version>|<aliasName>
切换使用指定的版本或别名的nodenvm ls
列出所有版本nvm current
显示当前版本nvm install
安装最新版本nvmnvm alias <name> <version>
给不同的版本号添加别名nvm unalias <name>
删除已定义的别名