管理器
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
tip
如果 npm link 不工作或报错,可以尝试使用 yarn link:
cd /path/to/your-package
yarn link
cd /path/to/your-project
yarn link your-package
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 nnrmnrm 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--example: 用于从 npm 包的示例中创建一个新的项目或文件结构。这个选项通常用于快速启动一个项目,特别是当你想要基于某个包的示例代码进行开发时。例如:npx create-next-app@latest nextjs-dashboard --example "https://github.com/vercel/next-learn/tree/main/dashboard/starter-example" --use-pnpm--use-pnpm: 用于指定在执行命令时使用pnpm作为包管理器,而不是默认的npm。pnpm是一个快速、节省磁盘空间的包管理器,与npm和yarn类似,但它通过硬链接和符号链接来管理包,从而减少磁盘空间的使用和安装时间。
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 -hfnm -Vfnm 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 nvmmkdir ~/.nvmopen -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>删除已定义的别名