解决 CesiumJS 1.100 源码开发时 pnpm 不兼容的问题
1.100 版本后, CesiumJS 对源码进行了分包(也就是 workspaces
,又一说法 monorepo
,npm@v7
、pnpm
都原生支持这种解决方案),使用的是 npm 原生的 workspaces
方案,即在 package.json
中新增字段:
{
"workspaces": [
"packages/engine",
"packages/widgets"
]
}
这条字段在搭配使用 pnpm
进行依赖安装时看似没什么问题,但是在执行 gulp
的 prepare
函数(任务)时,会对依赖内的文件进行复制,对于依赖的安装管理,npm 和 pnpm 的策略是不同的,这就会导致有一些依赖的文件复制失败,提示找不到文件的错误。
根据群友 @zouyaoji 的方案,解决方法是开启 .npmrc
配置文件内的 shamefully-hoist=true
选项(设为 true
),重新执行:
pnpm install
之后会对根一级的 node_modules
进行重生成,这样就没问题了,可以常规执行 build
、build-ts
、build-docs
指令进行源代码开发调试。
另外,由于 npm 的 workspaces 方案与 pnpm 不兼容,所以你还可能需要创建一个 pnpm-workspace.yaml
并补齐内容(当然后期官方也许会补齐,说不准呢):
packages:
- 'packages/engine'
- 'packages/widgets'