React Native开发前端大宝剑随笔-生活工作点滴

在本地调试React外部依赖的正确姿势

2019-07-10  本文已影响6人  七玄之主

前言

实际开发中,可能我们的工程结构并不仅仅只有一个,很可能我们会专门抽出一个专用的UI库,而实际开发的工程将引用这个库。UI库虽然相对于业务工程来讲,相对稳定,修改变更很少,但是不可避免的会有修改,每次修改我们如果都要重新发布的话,相当麻烦,而且一部分私有库需要认证才能安装,如果我们暂时不知道这些信息,又要引入这个库来顺利开发,应该怎么办呢?

Yarn link

通过 link 命令可以将我们要使用的外部依赖链接到全局的 node_modules,例如我们在 my-app-ui 工程中执行如下命令 yarn link,之后,我们就可以直接在 my-app 工程中执行yarn link my-app-ui来使用之前链接的 my-app-ui 本地版本。这种用法,编译是没有问题的,但是实际运行项目后会出现如下错误。

hooks can only be called inside the body of a function component
error TS2717: Subsequent property declarations must have the same type.

这个问题究其原因是因为 my-app-uimy-app 维持了2份 React 或其他依赖的副本,由此导致了各种奇怪问题,详情参考 Hooks don't work with yarn link。看回答官方貌似也不会解决这个问题,而只是考虑优化下错误提示。那这个问题貌似无解,幸好下面有个哥们提到一个叫 Yalc 的解决方法。下面详细介绍下这个叫 Yalc 的东东。

Yalc

是一个比 npm | yarn link 更加先进的解决方法,能够避免相关依赖的问题。

首先执行命令 yarn global add yalc 全局安装 yalc

我们在 my-app-ui中执行 yalc publish,将其发布到本地存储库中。

然后在 my-app 工程中执行yalc link my-app-ui,这里的安装方式和 npm | yarn 一样,可以指定安装版本等信息,如此我们的本地存储库可以分版本管理。

最后执行 yarn install 来更新依赖关系。我们再重新编译执行 my-app 后就不会再抛出如下异常。

hooks can only be called inside the body of a function component

如果 my-app-ui 发生了更新以后,我们可以直接在 my-app-ui 工程中执行 yalc push,它会自动的更新所有添加了 my-app-ui 依赖的工程,比如 my-app ,整个过程真是优雅呀。

上一篇下一篇

猜你喜欢

热点阅读