Skip to content

pnpm

pnpm 如何升级一个依赖

比如升级 vitepress:

shell
pnpm up vitepress --latest -r
# 升级所有依赖
pnpm up  --latest -r

# 升级到指定版本
pnpm up vitepress@2.0.0-alpha.6 -r

其它

shell
# 打印含有被阻止构建脚本的软件包列表。
pnpm ignored-builds

workspace

shell
pnpm update --workspace [workspace name]

pnpm update --workspace docs

清除缓存

shell
pnpm store prune

# 查看缓存路径
pnpm store path

pnpm update

别名:pnpm up.

CommandMeaning
pnpm up遵循 package.json 指定的范围更新所有的依赖项。如果是 workspace 项目不会更新子 package 的依赖。
pnpm up --latestUpdates all dependencies to their latest versions
pnpm up foo@2foo 更新到 v2 上的最新版本
pnpm up "@babel/*"更新 @babel 范围内的所有依赖项

更新所有依赖项,除了 webpack。

pnpm update "\!eslint"

配置项

--recursive, -r

同时在所有子目录中使用 package.json (不包括 node_modules) 运行更新。

shell
pnpm --recursive update
# 将每个包中的 typescript 更新为最新版本
pnpm --recursive update typescript@latest

--latest, -L

更新到最新版本。 n

使用 pnpm 的 patch 命令打补丁,安装依赖后自动打上修改的内容

一个简单的 demo:

shell
mkdir patch-demo
cd patch-demo
pnpm init

安装ant-design-vue@1.7.8 依赖:

shell
pnpm i ant-design-vue@1.7.8

接下来,我们对该库进行自己的一些修改:

shell
# 注意这里要指定对应的版本
pnpm patch ant-design-vue@1.7.8

You can now edit the following folder: pnpm patch-commit /private/var/folders/3c/v35nykz53t11n6gl0gl2kn6w0000gn/T/e07c1fd284b06829e8872915955e71cd

然后我们打开生成的这个链接 /private/var/folders/3c/v35nykz53t11n6gl0gl2kn6w0000gn/T/e07c1fd284b06829e8872915955e71cd,在里面修改 ant-design-vue 的代码。

假设我们要在改方法加上一行打印。

js
module.exports = function isOdd(value) {
  console.log('patch') 
  const n = Math.abs(value);
  if (!isNumber(n)) {
    throw new TypeError('expected a number');
  }
  if (!Number.isInteger(n)) {
    throw new Error('expected an integer');
  }
  if (!Number.isSafeInteger(n)) {
    throw new Error('value exceeds maximum safe integer');
  }
  return (n % 2) === 1;
};

修改完成保存后,执行如下指令:

shell
pnpm patch-commit /private/var/folders/3c/v35nykz53t11n6gl0gl2kn6w0000gn/T/e07c1fd284b06829e8872915955e71cd

然后可以看到项目中生成了一个 patches/ant-design-vue.patch 的文件,同时在 package.json 中也增加了如下配置:

json
  "pnpm": {
    "patchedDependencies": {
      "ant-design-vue@1.7.8": "patches/ant-design-vue@1.7.8.patch",
      "element-ui@2.15.8": "patches/element-ui@2.15.8.patch"
    }
  }

查看 node_modeles 下的 ant-design-vue@1.7.8 代码,该修改已经加上了,后续别人拿到该项目,重新 pnpm i 也能得到修改后的代码。

注意:

如果使用 window 并且使用 git-bash 的话,文件路径要使用两个 \\ 分割,如:

shell
pnpm patch-commit  C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\482a1b2c5aaad6b4abb4d39bab8ef39c\\user

pnpm 如果链接一个包

使用 pnpm link <dir>

dir 就是你想链接的那个包的路径。

比如我有一个项目,我还开发了一个插件,然后我想在项目上测试下我写的插件。

就可以在我的项目下执行:

shell
pnpm link <插件路>

之后就可以使用这个插件提供的一些脚本命令了。

Released under the MIT License.