vsce 发布失败 - 使用 pnpm/yarn 的 VS Code 扩展

Vig*_*Ram 4 vscode-extensions yarnpkg pnpm yarn-v2

版本:

  • vsce 版本 1.71.0
  • 节点版本 v10.15.3
  • npm 版本 6.4.1

vsce 发布失败并显示以下消息:

正在执行预发布脚本“npm run vscode:prepublish”...

sfdx-command-builder@0.1.0 vscode:prepublish C:\Projects\VS Code Extensions\sfdx-command-builder
npm runco​​mpile

sfdx-command-builder@0.1.0 编译 C:\Projects\VS Code Extensions\sfdx-command-builder
tsc -p ./

错误命令失败:npm list --生产 --parseable --深度 = 99999 npm 错误!缺失:mkdirp@0.5.1,node-pre-gyp@0.14.0 npm 需要,错误!缺失:minimist@0.0.8,mkdirp@0.5.1 npm 需要,错误!缺少:minimatch@3.0.4,由ignore-walk@3.0.3 npm ERR要求!缺少:brace-expansion@1.1.11,minimatch@3.0.4 npm 需要,错误!缺少:balanced-match@1.0.0,brace-expansion@1.1.11 需要 npm 错误!缺失:concat-map@0.0.1,brace-expansion@1.1.11 需要 npm 错误!缺少:console-control-strings@1.1.0,npmlog@4.1.2 需要 npm 错误!缺失:继承@2.0.4,可读流@2.3.6 npm 所需的错误!缺少:safe-buffer@5.1.2,可读-stream@2.3.6 npm 需要,错误!缺少:safe-buffer@5.1.2,string_decoder@1.1.1 需要 npm 错误!缺少:console-control-strings@1.1.0,gauge@2.7.4 npm 需要,错误!缺少:string-width@1.0.2,gauge@2.7.4 需要 npm 错误!缺少:strip-ansi@3.0.1,gauge@2.7.4 npm 需要,错误!缺少:code-point-at@1.1.0,string-width@1.0.2 npm 需要的错误!缺少:is-fullwidth-code-point@1.0.0,string-width@1.0.2 npm 需要,错误!缺少:strip-ansi@3.0.1,string-width@1.0.2 npm 所需的错误!缺少:number-is-nan@1.0.1,is-fullwidth-code-point@1.0.0 npm 需要,错误!缺少:ansi-regex@2.1.1,strip-ansi@3.0.1 npm 需要,错误!缺少:string-width@1.0.2,wide-align@1.1.3 npm 所需的错误!缺失:继承@2.0.4,glob@7.1.6 npm 需要,错误!缺少:minimatch@3.0.4,glob@7.1.6 需要 npm 错误!缺失:once@1.4.0,glob@7.1.6 需要 npm 错误!缺失:once@1.4.0,inflight@1.0.6 npm 需要,错误!缺少:wrappy@1.0.2,inflight@1.0.6 npm 需要,错误!缺少:wrappy@1.0.2,once@1.4.0 npm 需要,错误!缺少:minipass@2.9.0,tar@4.4.13 npm 需要,错误!缺少:mkdirp@0.5.1,tar@4.4.13 npm 需要,错误!缺少:safe-buffer@5.1.2,tar@4.4.13 npm 需要,错误!缺少:yallist@3.1.1,tar@4.4.13 npm 需要,错误!缺少:minipass@2.9.0,fs-minipass@1.2.7 需要 npm 错误!缺少:safe-buffer@5.1.2,minipass@2.9.0 需要 npm 错误!缺少:yallist@3.1.1,minipass@2.9.0 需要 npm 错误!缺失:minipass@2.9.0,minizlib@1.3.3 需要

man*_*nak 5

发生这种情况是因为扩展的链接器无法解析依赖项。

要修复它,请根据您的存储库使用的节点包管理器执行以下操作:

  • yarn回购协议:

    vsce publish --yarn -p $my_token
    
    Run Code Online (Sandbox Code Playgroud)
  • pnpm回购协议:

    1. 如果您没有运行时依赖项,您可以保持简单,只需将其添加到您的package.json

      "scripts": {
          "package": "pnpm vsce package --no-dependencies",
          "publish": "pnpm vsce publish --no-dependencies"
      }
      
      Run Code Online (Sandbox Code Playgroud)

      或运行命令vsce publish patch --no-dependencies(根据需要使用minormajor代替,请参阅semverpatch

    2. 如果您有运行时依赖项,您需要首先将它们捆绑在一起,因此除了 (1) 之外,还将其添加到您的package.json

      "scripts": {
          "vscode:prepublish": "npm run esbuild-base -- --minify",
          "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node"
      }
      
      Run Code Online (Sandbox Code Playgroud)

对于任何一种情况,您显然都需要安装 vsce

pnpm i -D vsce # or `yarn add -D vsce`
Run Code Online (Sandbox Code Playgroud)

在第二个 pnpm 情况下,您还需要 esbuild

pnpm i -D esbuild
Run Code Online (Sandbox Code Playgroud)

请参阅相关 Github 问题中的更多信息。