gpt4 book ai didi

javascript - 使 webcomponents 捆绑一个 npm 包,以便可以有选择地导入 webcomponents

转载 作者:行者123 更新时间:2023-11-30 14:25:19 24 4
gpt4 key购买 nike

在我当前的项目中,我们正在根据 v1 规范构建 native Web 组件,我们目前正在webpack单个包 comp-webcomponents.js 中。

这是我们当前包的入口点文件:

import 'document-register-element';
import 'nodelist-foreach-polyfill';
import 'babel-polyfill';

import 'components/tabs/comp-tabs';
import 'components/workspace-switcher/workspace-switcher';
import 'components/table/comp-table';
import 'components/date/comp-date';
import 'components/datepicker/comp-datepicker';
import 'components/datetime/comp-datetime';
import 'components/decimal/comp-decimal';
import 'components/number/comp-number';
import 'components/editor/comp-editor';
import 'components/time/comp-time';
import 'components/input/comp-input';
import 'components/button/comp-button';
import 'components/toggle-button/comp-toggle-button';
import 'components/yearmonth/comp-yearmonth';

一些组件具有 vendor 依赖性,如 jQuery、datatables.net、jquery-ui、lodash 等。

问题 1:需要哪些步骤才能让其他项目有选择地导入单个 webcomponents?

有点像

import { compTable, compYearmonth } from "@comp-webcomponents";

问题 2:要使每个 Web 组件成为可以使用单个命名空间安装的 npm 包,需要什么?

有点像

npm install --save @comp-webcomponents/comp-div

示例组件:

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' });

非常感谢链接或其他有用的资源!

最佳答案

我在我的 Web 组件项目中使用 Typescript。我将所有单独的组件都放在一个 src 文件夹中,我也在其中创建了一个 index.ts 文件并单独导出每个组件。

export {compDiv, compTable, comeYearmonth} from './compDiv';
export {example} from './example';

您可以阅读它并按照此 tutorial 中的说明进行操作尝试。在我使用 tsc 构建并且我的类型声明位于我的 dist 文件夹中之后,我 publish to NPM .发布后,我可以像这样导入:

import { compTable, compYearmonth } from "@comp-webcomponents";

您还可以查看 Stencil ,一个生成可重用网络组件的编译器。

这是我的网络组件的样子:

export class ExampleComponent extends HTMLElement {

constructor() {
super();

const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.appendChild(ExampleComponent.template.content.cloneNode(true));
}

connectedCallback() {
console.log('hello');
}
}

ExampleComponent.tag = 'example-component';
ExampleComponent.template = document.createElement('template');
ExampleComponent.template.innerHTML = `
<template>
<p>hello</p>
</template>
`;
customElements.define(ExampleComponent.tag, ExampleComponent);

关于javascript - 使 webcomponents 捆绑一个 npm 包,以便可以有选择地导入 webcomponents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52040458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com