Skip to main content

管理器

npm包管理器

yarn

  • 安装:corepack enableCorepack是Node.js 默认附带的工具,会将yarn二进制文件添加到PATH)

npm

npm(Node Package Manager)是Node.js的默认包管理器。npm是用于安装、升级、删除和管理JavaScript包的工具,这些包可以是库、插件、框架或应用程序。

问题记录: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镜像为taobao
  • nnrm 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发布

  1. 切换到npm源
  2. npm login
  3. 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,分别为toolsmini-cli,要在min-cli包下安装react,那么可以执行以下命令:

pnpm --filter mini-cli add react
tip

注意,--filter或者-F后面跟的是包的package.jsonname,而不是包的目录名

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-apackages/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 execnpx 都是用于执行本地安装的命令行工具的命令,但它们有一些关键的区别。

npxnpm 包管理器的一部分,用于执行本地或远程安装的命令行工具。它在 npm 版本 5.2.0 中引入,并在 npm 版本 7 中成为一个独立的包。

npx的特点:

  1. 执行本地安装的工具npx 可以执行项目中本地安装的命令行工具,而无需全局安装。
  2. 临时安装工具:如果命令行工具未在本地安装,npx 会临时下载并执行它。
  3. 简化命令npx 可以简化一些常见的命令行操作,例如运行脚本或工具。
# 执行本地安装的工具
npx eslint .

# 临时安装并执行工具
npx create-react-app my-app

pnpm execpnpm 包管理器的一部分,用于执行本地安装的命令行工具。它类似于 npx,但专门为 pnpm 生态系统设计。

pnpm exec的特点

  1. 执行本地安装的工具pnpm exec 可以执行项目中本地安装的命令行工具,而无需全局安装。
  2. 依赖于 pnpmpnpm exec 只能用于使用 pnpm 管理依赖的项目。
  3. 不支持临时安装:与 npx 不同,pnpm exec 不会临时下载并执行未安装的工具。
# 执行本地安装的工具
pnpm exec eslint .

# 使用 pnpm exec 运行脚本
pnpm exec jest

主要区别:

  1. 包管理器

    • npxnpm 的一部分,可以用于任何使用 npmyarn 管理依赖的项目。
    • pnpm execpnpm 的一部分,只能用于使用 pnpm 管理依赖的项目。
  2. 临时安装

    • npx 可以临时下载并执行未安装的命令行工具。
    • pnpm exec 不支持临时安装工具,只能执行已经安装的工具。
  3. 性能和磁盘空间

    • pnpm 通过硬链接和去重技术,通常比 npmyarn 更节省磁盘空间和安装时间。
    • 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> 切换使用指定的版本或别名的node
  • nvm ls 列出所有版本
  • nvm current 显示当前版本
  • nvm install 安装最新版本nvm
  • nvm alias <name> <version> 给不同的版本号添加别名
  • nvm unalias <name> 删除已定义的别名