解决 CesiumJS 1.100 源码开发时 pnpm 不兼容的问题

1.100 版本后, CesiumJS 对源码进行了分包(也就是 workspaces,又一说法 monoreponpm@v7pnpm 都原生支持这种解决方案),使用的是 npm 原生的 workspaces 方案,即在 package.json 中新增字段:

{
  "workspaces": [
    "packages/engine",
    "packages/widgets"
  ]
}

这条字段在搭配使用 pnpm 进行依赖安装时看似没什么问题,但是在执行 gulpprepare 函数(任务)时,会对依赖内的文件进行复制,对于依赖的安装管理,npm 和 pnpm 的策略是不同的,这就会导致有一些依赖的文件复制失败,提示找不到文件的错误。

根据群友 @zouyaoji 的方案,解决方法是开启 .npmrc 配置文件内的 shamefully-hoist=true 选项(设为 true),重新执行:

pnpm install

之后会对根一级的 node_modules 进行重生成,这样就没问题了,可以常规执行 buildbuild-tsbuild-docs 指令进行源代码开发调试。

另外,由于 npm 的 workspaces 方案与 pnpm 不兼容,所以你还可能需要创建一个 pnpm-workspace.yaml 并补齐内容(当然后期官方也许会补齐,说不准呢):

packages:
  - 'packages/engine'
  - 'packages/widgets'
posted @ 2022-11-21 14:11  岭南灯火  阅读(506)  评论(0编辑  收藏  举报