ralliejs / rallie

a library that helps users implement decentralized front-end micro service architecture
https://rallie.js.cool
MIT License
298 stars 25 forks source link

同一三方库如何共存多个版本 #38

Closed itmanyong closed 2 years ago

itmanyong commented 2 years ago

demo的结构所有app的三方库都在最外层package中,如果使用了antd3与antd4的项目需要融合进rallie的话,是否支持3与4版本共存呢!还是需要开发者自己将3升级为4后再进行融合!!

run-nan commented 2 years ago

非常抱歉回复晚了,最近在找工作和学习web3的知识,这个项目的issue没有及时看。 关于您提到的问题,我没有亲自试过,但是可以根据我的理解向您解答:

  1. 基于现代构建工具构建出来的两个sdk,如果不是用到一些特殊的库,理论上应该不会出现js污染,所以理论上antd3和antd4在js层面应该是互不影响的
  2. antd3和antd4兼容的主要问题应该是css冲突,主要是类名冲突,这个可以通过配置ConfigProvider自定义类名前缀prefixCls解决,理论上使用了自定义类名前缀后,分别使用antd3和antd4的项目应该是可以共存的
  3. 最推荐的方案还是统一antd的版本,然后把antd这类公共库声明为lib,然后app声明依赖或关联antd即可,具体参看文档的共享公共库章节
  4. 如果按上面的方法试了发现还是会有问题,可能就得针对问题具体排查,单点解决。qiankun因为默认总是会有这样那样的问题,所以强力推荐沙箱,但是我个人在公司级项目中使用qiankun的感受是,隔离带来的麻烦多,收益小。我觉得在基于现代前端工具链开发的前提下,即使不用沙箱出问题的概率也并不大。Rallie默认不提供开箱即用的js隔离和css隔离方案。如果你要使用隔离功能,需要自己通过编写中间件的方式接入
itmanyong commented 2 years ago

非常抱歉回复晚了,最近在找工作和学习web3的知识,这个项目的issue没有及时看。 关于您提到的问题,我没有亲自试过,但是可以根据我的理解向您解答:

  1. 基于现代构建工具构建出来的两个sdk,如果不是用到一些特殊的库,理论上应该不会出现js污染,所以理论上antd3和antd4在js层面应该是互不影响的
  2. antd3和antd4兼容的主要问题应该是css冲突,主要是类名冲突,这个可以通过配置ConfigProvider自定义类名前缀prefixCls解决,理论上使用了自定义类名前缀后,分别使用antd3和antd4的项目应该是可以共存的
  3. 最推荐的方案还是统一antd的版本,然后把antd这类公共库声明为lib,然后app声明依赖或关联antd即可,具体参看文档的共享公共库章节
  4. 如果按上面的方法试了发现还是会有问题,可能就得针对问题具体排查,单点解决。qiankun因为默认总是会有这样那样的问题,所以强力推荐沙箱,但是我个人在公司级项目中使用qiankun的感受是,隔离带来的麻烦多,收益小。我觉得在基于现代前端工具链开发的前提下,即使不用沙箱出问题的概率也并不大。Rallie默认不提供开箱即用的js隔离和css隔离方案。如果你要使用隔离功能,需要自己通过编写中间件的方式接入

祝你能收到心怡的offer!! 还有点疑惑即是: 1.我在运行demo的过程中发现需要自行额外安装类似react/react-dom/vue等强依赖才能使demo跑起来。如果说ant3和4版本需要共存于rallie,那么在package中就无法达成共存,因为同名包覆盖性嘛!!其实这个点是最不解的。 2.关于我之前运行demo遇到的问题之前也有提过一个issuse,由于排查后解决了所以就关闭了,详见#issue37 3.相较于qiankun来说rallie不采取隔离的方案,更加中意于rallie的应用全同级,无主/子应用之分。这是一个非常棒很符合个人的理解。

run-nan commented 2 years ago

非常抱歉回复晚了,最近在找工作和学习web3的知识,这个项目的issue没有及时看。 关于您提到的问题,我没有亲自试过,但是可以根据我的理解向您解答:

  1. 基于现代构建工具构建出来的两个sdk,如果不是用到一些特殊的库,理论上应该不会出现js污染,所以理论上antd3和antd4在js层面应该是互不影响的
  2. antd3和antd4兼容的主要问题应该是css冲突,主要是类名冲突,这个可以通过配置ConfigProvider自定义类名前缀prefixCls解决,理论上使用了自定义类名前缀后,分别使用antd3和antd4的项目应该是可以共存的
  3. 最推荐的方案还是统一antd的版本,然后把antd这类公共库声明为lib,然后app声明依赖或关联antd即可,具体参看文档的共享公共库章节
  4. 如果按上面的方法试了发现还是会有问题,可能就得针对问题具体排查,单点解决。qiankun因为默认总是会有这样那样的问题,所以强力推荐沙箱,但是我个人在公司级项目中使用qiankun的感受是,隔离带来的麻烦多,收益小。我觉得在基于现代前端工具链开发的前提下,即使不用沙箱出问题的概率也并不大。Rallie默认不提供开箱即用的js隔离和css隔离方案。如果你要使用隔离功能,需要自己通过编写中间件的方式接入

祝你能收到心怡的offer!! 还有点疑惑即是: 1.我在运行demo的过程中发现需要自行额外安装类似react/react-dom/vue等强依赖才能使demo跑起来。如果说ant3和4版本需要共存于rallie,那么在package中就无法达成共存,因为同名包覆盖性嘛!!其实这个点是最不解的。 2.关于我之前运行demo遇到的问题之前也有提过一个issuse,由于排查后解决了所以就关闭了,详见#issue37 3.相较于qiankun来说rallie不采取隔离的方案,更加中意于rallie的应用全同级,无主/子应用之分。这是一个非常棒很符合个人的理解。

  1. 你应该是clone完仓库后进的playground目录自行npm install。实际上整个库用monorepo管理,React/React-DOM/Vue这些库我是声明在最外层,所以你要跑的话最好在仓库最外层npm install -> npm run bootstrap -> npm run playground:dev
  2. 同一个包不同版本共存这种场景,肯定得是分开两个仓库开发的,分仓库开发也就不存在同名包覆盖问题。我设置的demo只是为了演示用,实际场景一般不会像demo这样组织
itmanyong commented 2 years ago

非常抱歉回复晚了,最近在找工作和学习web3的知识,这个项目的issue没有及时看。 关于您提到的问题,我没有亲自试过,但是可以根据我的理解向您解答:

  1. 基于现代构建工具构建出来的两个sdk,如果不是用到一些特殊的库,理论上应该不会出现js污染,所以理论上antd3和antd4在js层面应该是互不影响的
  2. antd3和antd4兼容的主要问题应该是css冲突,主要是类名冲突,这个可以通过配置ConfigProvider自定义类名前缀prefixCls解决,理论上使用了自定义类名前缀后,分别使用antd3和antd4的项目应该是可以共存的
  3. 最推荐的方案还是统一antd的版本,然后把antd这类公共库声明为lib,然后app声明依赖或关联antd即可,具体参看文档的共享公共库章节
  4. 如果按上面的方法试了发现还是会有问题,可能就得针对问题具体排查,单点解决。qiankun因为默认总是会有这样那样的问题,所以强力推荐沙箱,但是我个人在公司级项目中使用qiankun的感受是,隔离带来的麻烦多,收益小。我觉得在基于现代前端工具链开发的前提下,即使不用沙箱出问题的概率也并不大。Rallie默认不提供开箱即用的js隔离和css隔离方案。如果你要使用隔离功能,需要自己通过编写中间件的方式接入

祝你能收到心怡的offer!! 还有点疑惑即是: 1.我在运行demo的过程中发现需要自行额外安装类似react/react-dom/vue等强依赖才能使demo跑起来。如果说ant3和4版本需要共存于rallie,那么在package中就无法达成共存,因为同名包覆盖性嘛!!其实这个点是最不解的。 2.关于我之前运行demo遇到的问题之前也有提过一个issuse,由于排查后解决了所以就关闭了,详见#issue37 3.相较于qiankun来说rallie不采取隔离的方案,更加中意于rallie的应用全同级,无主/子应用之分。这是一个非常棒很符合个人的理解。

  1. 你应该是clone完仓库后进的playground目录自行npm install。实际上整个库用monorepo管理,React/React-DOM/Vue这些库我是声明在最外层,所以你要跑的话最好在仓库最外层npm install -> npm run bootstrap -> npm run playground:dev
  2. 同一个包不同版本共存这种场景,肯定得是分开两个仓库开发的,分仓库开发也就不存在同名包覆盖问题。我设置的demo只是为了演示用,实际场景一般不会像demo这样组织

明白了!没注意外层的package。感谢解惑