Closed ClarkXia closed 2 years ago
该 PR 对 ice.js 2.x 存在较多不可预知的不稳定因素,并可能因此引入其他非需要依赖。因此,不打算为 icejs 2.x 提供功能完备的 pnpm 支持。
对于需要使用在 ice.js 2.x 使用 pnpm 的用户,我们建议您使用 shamefully-hoist。在 ice.js 项目下新增 .npmrc
文件,并配置:
shamefully-hoist=true
ice.js 3.x 将默认支持 pnpm,欢迎您的关注。
由于 icejs 的运行时依赖均为 Phantom dependencies(幽灵依赖),导致在使用 pnpm 时必须添加 --shamefully-hoist 进行提升 期望支持 pnpm i 的方式进行安装
方案设计
需要提升的包
Core 依赖
插件 plugin-react-app
-[x] query-string
插件 plugin-request
插件 plugin-store
插件 plugin-icestark
插件 plugin-dev-inspector
插件 plugin-keep-alive
插件 plugin-rematch不再维护- [ ] react-redux- [ ] @rematch/core插件 plugin-router
方案一
将运行时 Phantom dependencies 收敛到
@ice/runtime
中,如果使用 pnpm 只需要在项目中添加@ice/runtime
这个依赖包即可。@ice/runtime 可预置进项目的 Dependencies。
优点:天然隔离 Phantom dependencies 的问题,用户无需过多配置; 缺点:需要修改运行时依赖代码;需要单独维护一个包,所有依赖从 @ice/runtime 导出(需要考虑成本);三方运行时依赖不好处理。
方案二
提供一份
.npmrc
配置,只将运行时 Phantom dependencies 幽灵依赖提升至当前项目 node_modules。优点:不需要修改运行时代码。 缺点:运行时依赖可能跟随配置变化,依赖变更会影响需修改现有配置;配置文件需要用户手动维护。