@chialab/dna

中文文档
4.6.2发布于 2026/09/29MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 1755

Progressive Web Components

原始使用文档
文档目录13 节
  1. Features
  2. Customized built-in elements
  3. Properties, states and attributes
  4. Slots
  5. Listeners and async events
  6. Cross-framework compatibility
  7. Storybook and documentation
  8. Get the library
  9. Define a Component
  10. Development
  11. Build
  12. Test
  13. License

DNA

Progressive Web Components

NPM

Features

DNA aims to unleash the power of Custom Elements through declarative API, customized built-in elements and a shadow-free composition.

Customized built-in elements

DNA makes it easy to create customized built-in elements that inherit HTML behavior, preserving usability and accessibility.

Properties, states and attributes

With @property and @state decorators, DNA adds reactivity to class fields, syncing with attributes and triggering updates on change.

Slots

DNA renders slotted content via a custom light DOM engine —no Shadow DOM— ensuring form compatibility and allowing <slot> inside built-in elements like <button>.

Listeners and async events

Use the @listen decorator for delegated event handling, even for slotted content. Events can be async and dispatched from within the class.

Cross-framework compatibility

Built with standard Web Components APIs, DNA works with any framework. Plasma can generate wrappers for React, Vue, Svelte, and Angular.

Storybook and documentation

The DNA tools ecosystem includes a Storybook preset for Web Components, which automatically generates documentation and controls for your components.

Get the library

Install via NPM:

npm i @chialab/dna
yarn add @chialab/dna
pnpm add @chialab/dna

Define a Component

import { Component, customElement, listen, property } from '@chialab/dna';

@customElement('hello-world')
class HelloWorld extends Component {
    // define an observed property
    @property() name: string = '';

    render() {
        return (
            <>
                <input
                    name="firstName"
                    value={this.name}
                />
                <h1>Hello {this.name || 'World'}!</h1>
            </>
        );
    }

    // delegate an event
    @listen('change', 'input[name="firstName"]')
    private onChange(event: Event, target: HTMLInputElement) {
        this.name = target.value;
    }
}

Then use the element in your HTML:

<hello-world></hello-world>

Development

Build status codecov BrowserStack Status

Build

Install the dependencies and run the build script:

pnpm install
pnpm build

This will generate the bundles in the dist folder, as well as the declaration files.

Test

Run the test script:

pnpm test

Cross-browser tests run on real devices and browsers thanks to BrowserStack. To run them locally:

export BROWSERSTACK_USERNAME=<your-username>
export BROWSERSTACK_ACCESS_KEY=<your-access-key>
pnpm test:browserstack

License

DNA is released under the MIT license.

版本与发布记录

@chialab/dna 共发布 249 个版本,首次发布于 2019/03/29;过去 12 个月发布了 8 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
4.6.2latest2026/09/291 个月前
4.6.12026/09/281 个月前
4.6.02026/08/282 个月前
4.5.22026/05/036 个月前
4.5.12026/04/136 个月前
3.22.82026/03/237 个月前

其他发布通道:rc → 3.4.0-rc.2,alpha → 4.0.0-alpha.16,beta → 4.4.0-beta.16。

关于 @chialab/dna 的常见问题

@chialab/dna 是什么?

Progressive Web Components

如何安装 @chialab/dna?

在项目目录运行 npm install @chialab/dna,或使用 pnpm add / yarn add / bun add。

@chialab/dna 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@chialab/dna 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@chialab/dna 可以商用吗?

@chialab/dna 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@chialab/dna 的下载量有多少?

根据 npm 官方下载统计,@chialab/dna 在 2026/10/10 – 2026/11/08 这 30 天内被下载 1,755 次,日均约 59 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chialab/dna 还在维护吗?

最新版本 4.6.2 发布于 2026/09/29(1 个月前);至今共发布 249 个版本,其中过去 12 个月发布了 8 个;首次发布于 2019/03/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。