我有一组规范 v1 自定义元素,我使用 webpack 4 来捆绑(和 babel-loader 进行转译)。
所有组件看起来都与此类似:
export class CompDiv extends HTMLDivElement {
constructor(...args) {
const self = super(...args);
self.property = null;
return self;
}
connectedCallback() {
console.log('connected CompDiv');
}
}
customElements.define('comp-div', CompDiv, { extends: 'div' });
现在,为了能够使用选择性的命名导入从这些组件创建自定义包,我需要将这些文件标记为无副作用。
但是,组件注册发生在模块本身中:
customElements.define('comp-div', CompDiv, { extends: 'div' });
据我了解,这是一个副作用。
现在我有一个index.js
基本上看起来像这样的:
export { CompDiv } from './components/comp-div/comp-div';
...
export { CompBtn } from './components/comp-btn/comp-btn';
我的 webpack 入口点如下所示:
import 'document-register-element';
import 'babel-polyfill';
import { CompDiv } from './index';
现在,当我这样做时,CompBtn
(以及 index.js 中的所有其他导出)最终成为捆绑包的一部分,即使它没有导入我的 webpack 入口点。
在 webpack 中允许使用这些 web 组件进行 treeshaking 的推荐方法是什么?