我正在开发一个网络应用,我需要本地定义的React组件来覆盖' (即优先)默认的公共代码库中的React组件。公共代码库是本地应用程序的依赖项,它提供服务器代码和默认组件。
目标是,如果您需要公共代码库并运行应用程序而不进行任何更改,您将获得应用程序的vanilla版本,但如果您在本地定义组件(例如Logo.jsx),那么应用程序应该使用该版本的Logo.jsx而不是底层代码库中的默认组件。
我的第一个想法是通过在底层代码库中的所有组件中使用动态import语句来解决这个问题,这样在构建时webpack就会查找组件的本地版本,然后在本地版本中包含本地版本。依赖图或者使用回退组件。在伪代码中,我对此解决方案的理想版本看起来像这样:
定义自定义导入语句(importCustomOrDefaultComponent.js
):
function importCustomOrDefaultComponent(name) {
// check for a component with this name in the local project, and if so, return
// if no local component exists, return the default component from this repo
}
module.exports = importCustomOrDefaultComponent;
在底层代码库中的所有组件中使用该自定义import语句(例如NavBar
组件):
import React from 'react';
const importCustomOrDefaultComponent = require('../importCustomOrDefaultComponent.js');
const Logo = importCustomOrDefaultComponent('Logo.jsx')
function NavBar () {
return (
<div>
...
<Logo />
...
</div>
);
};
export default NavBar;
我一直在摆弄这个并且似乎不可能像我上面概述的那样做,因为webpack不会让你使用像这样的自定义导入语句来影响它如何构建依赖项。我尝试用{fs&#39;}编写importCustomOrDefaultComponent
。要查找自定义文件,但这并不起作用,因为webpack试图将函数与其他所有内容捆绑在一起,最终我收到错误,因为&#39; fs&#39;将无法在浏览器中显示...您似乎只能使用require('xxx')
或import xxx from 'xxx'
。以上是否可行,如果可以,那importCustomOrDefaultComponent(name)
将如何运作?
如果这不能通过源中的自定义导入功能完成,可以通过webpack插件完成吗?我无法找到处理这种情况的任何人。
如果这不起作用,是否有其他模式可以实现我的目标?