如何在通过 NPM 分发时管理 React 组件(Redux、CSS)的自定义方面

Posted

技术标签:

【中文标题】如何在通过 NPM 分发时管理 React 组件(Redux、CSS)的自定义方面【英文标题】:How to manage custom aspects of a React component (Redux, CSS) whilst distributing via NPM 【发布时间】:2018-11-25 04:34:57 【问题描述】:

问题:自定义 Redux 容器和 CSS 通常如何通过 NPM 处理? 下面的结构不适用于 NPM 等传统包分发平台,因为我需要编辑自定义不同项目中的 Redux 容器和 CSS 等文件。


鉴于我在自定义 React 组件库中有许多组件,具有以下结构和文件:

> Component root dir
 > Component.js
 > Component.css 
 > Component_container.js
 > Component_custom.css
Redux 容器保存从项目更改的存储引用 投射 CSS 还为每个项目提供可自定义的样式 这些组件通过其容器引用其他组件

例如:

App.js   
  => Component_1_container.js   
    => Component_1.js   
      => Component_2_container.js
        => Component_2.js 

这很棒,因为它允许我从共享代码中分离出自定义代码,我可以在许多项目中更新 Component.js 和 Component.css 而无需触及自定义文件中的代码。但是自定义容器和 CSS 文件无法通过 NPM 进行管理。

我可以很容易地看到如何将 CSS 提取到单独的文件夹中。 Redux 容器更难,因为它们被其他组件引用为上述结构中的依赖项。将它们从 NPM 移出到另一个项目文件夹中会使组件之间的引用难以管理。

【问题讨论】:

【参考方案1】:

我正在考虑非常相似的问题,我认为您可以创建一个名为 ui-kit 的单独模块(无论是 npm 模块还是只是您项目中标记为模块的文件夹),并且所有组件都将是 @987654323 @free,因为此组件的客户端可以使用其他商店或不使用任何商店。

此外,您将拥有文件夹 component 或您现在拥有的文件夹,并且您的 高级组件(App.js) 将只知道您的 组件哪个会知道ui-kit

结构:

app
  -> Components (containers)
    -> Component.js
    -> Component.css
  -> ui-kit (Redux free components)
    -> Component.js
    -> Component.css
  App.js (High-level component)

【讨论】:

是的,这是一种潜在的解决方案,唯一的问题是 NPM 组件相互之间存在交叉依赖关系,引用了其他组件的容器元素。如果这些位于您项目中的其他位置,如何准确说明对其他组件的相互关系引用? 本项目文件结构可参考:github.com/react-boilerplate/react-boilerplate/tree/master/app 谢谢,这很有用。【参考方案2】:

经过相当多的指南和示例存储库,似乎最好的方法是让几个容器元素位于更高级别,控制许多相关组件。

我觉得每个组件都可以通过自己的容器单独访问商店,并且可以根据项目进行更改,这是一个不错的想法,但这是一个难以管理的解决方案。

这里的主要内容是展示组件不应该将容器组件称为依赖项。

从组件目录中分离出容器和自定义样式文件后,创建仅包含可重用代码的 NPM 组件就足够简单了。

问题是在一个应用程序中使用多少个容器,这里很好地总结了如何根据容器对组件进行分组,我发现这对回答这个问题很有用: http://www.thegreatcodeadventure.com/the-react-plus-redux-container-pattern/

【讨论】:

以上是关于如何在通过 NPM 分发时管理 React 组件(Redux、CSS)的自定义方面的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一个 React 组件中管理多个 setState 调用?

React Native NPM 模块中的静态图像

如何查看管理npm模块--react-native为例

如何将 React 组件导出为 NPM 包以在单独的项目中使用?

如何制作react组件包上传到npm

react组件化开发发布到npm