我正在编写一个库,您可以使用它将 React 应用程序呈现为 Web 组件。像这样:
ReactWebComponent.create(<App />, 'my-react-web-component', { css: 'inject' });
你可以看到有一个选项{ css: 'inject' }
。要使用 CSS 创建 Web 组件,我需要将<link>
标签添加到 shadow dom。这发生在我的图书馆内。
虚拟代码:
ReactWebComponent.create = function(options) {
const proto = Object.create(HTMLElement.prototype, {
attachedCallback: {
value: function() {
const mountPoint = document.createElement('span');
const shadowRoot = this.createShadowRoot();
shadowRoot.appendChild(mountPoint);
shadowRoot.insertAdjacentHTML('beforeend', options.css);
ReactDOM.render(<App />, mountPoint);
}
}
});
document.registerElement('react-web-component', {prototype: proto});
};
现在我当然不想附加字符串'inject'
。相反,我想编写一个 Webpackplugin
或者获取由extract-text-webpack-pluginloader
生成的 CSS 文件并在有. 所以从<link>
'inject'
ReactWebComponent.create(<App />, 'my-react-web-component', { css: 'inject' });
我想生成这个
ReactWebComponent.create(<App />, 'my-react-web-component', { css: '<link rel="stylesheet" type="text/css" href="styles.a4e5f9.css">' });
我认为替换部分可以很容易地完成RegEx
,但是我很困扰如何获取 CSS 文件名以及如何转换 JS 文件。