npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@wc1/wc

v1.5.64

Published

Web Component ONE

Downloads

31

Readme

Web Component One

现代原生化动态组件 WEB 开发框架。 主页 NPM

1. 轮子的再造

WEB 前端的开发越来越复杂臃肿,我们一直在考虑,能否有一种方式,既能应用 现代的 WEB 开发技术如 MVVM,Typescript 等,又能够直观和简洁快速开发? 我们测试了许多开源框架,如 vue、angular 等,在我们所期望重要的目标都未能或者不方便实现, 因此我们决定尝试自己做一下。庆幸的是,经过一年来开发和项目试用,我们的预期得到实现。

2. 首要目标

本框架首要目标是实现组件化开发和动态加载,动态组装,以期解决在面向复杂业务和产品时的不断迭代,多人多团队协同开发、版本发布和上线等问题。 我们的理想目标是各个界面元素组件均是动态发布,实现线上组装和装配,支持在线的开发和协作。 有许多常见的开发场景将会用到这个特性。

  • 有别于其他的框架,我们的重点的是:无打包, 动态依赖, 所有的组件化方式以标准 WebComponent 技术实现,同时实现数据模型驱动。
  • 因此,我们为本框架命名为 Web Component One, 简称为: WC1
  • 真实 DOM 现代浏览器性能和优化已近很强大了,我们测试过实际的 DOM 性能,在恰当的设计后完全可以满足项目需求,并且能够提供更优秀的性能和可操作性。 因此,我们决定抛弃 VDOM,完全以原生 DOM 实现,并结合了模板预加载、合并更新、动态变更依赖等技术,来最终实现整个框架。

  • 最小尺寸无依赖 为优化大小和提升性能,本框架不依赖任何第三方组件,目前包括动态加载等完整功能库大小约为 60K,gzip 压缩后 20K 左右。

3.功能

以下是目前已经实现的基本特性:

  • 动态加载和依赖加载

    全动态和依赖加载可支持 组件,第三方库,JS,CSS; 每个组件均可定义自身依赖项,当页面使用到此组件时自动加载相关依赖,并能避免重复多次加载。

  • MVVM 视图和数据依赖变更

    简化的数据视图模型,类似 VUE

  • 增强的样式数据绑定

    可直接数据绑定到任意 style

  • 开发模式热更新
  • 自动配色管理
  • 模板加载和缓存
  • 路由
  • 动画的支持
  • UI 库的支持

    UI 库的引入使得可以使用最熟悉的 HTML 标准标签,并可方便更换 UI 库,样式,风格等。

  • ...

4. 快速开始

  • 回归和直观

    曾经的年代,前端开发很直观,写写 HTML,调调 JS,再改点 CSS... 现在却要折腾许多打包、环境、分段、框架...,本该集中在美观和设计的精力却大量放在了代码和环境。 因此,我们期望能回归原始,开始尝试下吧。

  • 快速上手

    WC1 的项目工程很简洁,不需要更多的附加库和依赖,直接动手就行。

    • 主入口 index.html: 新建文件,内容如下:

      <!DOCTYPE html>
      <html>
        <head>
          <meta name="npm" content="https://cdn.jsdelivr.net/npm/" />
        </head>
        <script src="https://cdn.jsdelivr.net/npm/@wc1/[email protected]/index.js"></script>
        <body>
          <main-></main->
        </body>
      </html>
      • 这里的 <meta name="npm"> 代表 npm 软件包仓库位置,所需要的第三方包和组件的位置,这里我们使用标准 CDN
      • <main-></main-> 标签代表这是一个我们的组件,由于 WebComponent 规范的要求, 自定义组件必须包含 "-" 这个标签代表将要加载当前目录下的 main.html 作为组件。
    • 主页面组件 main.html: 新建文件,内容如下(./simple1/main.html ):

      <template @timer.1000="counter++">
        <meta name="scope" counter.number="0" />
        <style>
          :host {
            display: block;
            border: ":${counter%10}px solid red ";
          }
          button {
            background-color: rgb("$counter*20%255", "$counter*50%255", 0);
          }
        </style>
        <h3>Main Content</h3>
        <h3 $>counter</h3>
        <h5 :>This is a Counter: ${counter}</h5>
        <button @click="data.a++">click data</button>
        <h3 $>data</h3>
        <button @click="onClick($ev)">click data</button>
        <h3 $if="counter%2">Hello World</h3>
        <script scope=".">
          define(() =>
            class {
              data = { a: 1, b: 2 };
              onClick() {
                alert("CLICK ME");
              }
            });
        </script>
      </template>
      • 这就是一个标准的组件
      • <template @timer.2000="counter++" > 组件标准入口标签,所有组件均为此入口。@timer 代表当前组件事件,可以绑定任意的 DOM 事件或者组件标准事件(timer,ready ...) - \
      • <meta name="scope" /> 当前组件作用域,你可以理解为 Vue 的组件域,其中定义的变量可以直接通过数据绑定使用。
      • html <h3 $>counter</h3><h5 :>This is a Counter: ${counter}</h5> 这个就是数据绑定了, 其中 "$" 代表值绑定, 代表直接执行内容作为js求值语句,并把结果传递给绑定元素。当前单独的 "$" 代表绑定到元素的文本内容。 另外就是 ":" 内容绑定,其实就是 ":" 绑定内容作为 ES6 的模板字符串执行,这个很容易理解。
      • <button @click="data.a++">click data</button> 这一行使用了 "@" 事件绑定, 和 vue 中基本一致,可以绑定所有原生事件和自定义事件, 可以直接写执行语句(JS)或者使用 scope 中定义的方法。
      • <script scope="."> 使用 js 导入作用域, scope='.' 代表引入根作用域,可自定作用域变量。js 引用使用标准 AMD 动态加载格式。 使用 script 定义的作用域变量和使用 meta name=scope 可以混用,也可单独使用。
      • border: ":${conter%10}px solid red"; 可以看到,数据绑定可直接使用在 style 中, 格式要求使用 " 或者 **'**包括, 引号内第一个字符代表使用 $ 还是 :引用, 格式同上
  • 运行 无需更多操作,你可以使用任意 HttpServer 挂载当前目录即可运行,也可直接上传到发布服务器,CDN 等。

    我是用的是 pnpm i -g http-server 软件包 可以执行 http-server -c-1 ./sample1 命令直接执行并访问 localhost:8080 地址。

5. 标准项目

标准项目支持热更新,typescript 等特性,无需 webpack 等复杂打包工具,秒开和快速打包。

标准项目需要标准 npm 包管理工具, 我们推荐使用 pnpm

  • 初始化目录和包: 新建目录,然后 "pnpm init" 来初始化包。
  • 全局安装我们的命令行工具 @wc1/cli
  • 将上一节的源文件放入 "src" 子目录
  • 在项目目录下运行 wc1 即可启动开发环境
  • 如需 typescript 支持, 全局安装 typescript : pnpm i -g typescript, 创建 tsconfig.json,样例如下:
{
  "include": ["./src", "./package.json"],
  "exclude": [],
  "compilerOptions": {
    "target": "ES6",
    "module": "AMD",
    "lib": ["ES6"],
    "declaration": false,
    "outDir": "./build/",
    "removeComments": true,
    "resolveJsonModule": true,
    "moduleResolution": "node",
    "baseUrl": "./",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  }
}

6. 更多

还有更多功能,如$if,$show, $for 的支持, 外部 js 支持,typescript 支持等,详情请关注首页。

7. 关于开源

本仓库不包含源码,仅包含文档以及示例。目前尚未开源,但是发布包遵循 MIT 协议,可任意免费使用。当前项目状态还在开发中,主体功能基本稳定,还有不少细节和特性还在修订和完善。 如喜欢本项目人数较多,我们会考虑尽快开源。