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

hcs

v0.1.10

Published

HTML precompiled by component tool

Downloads

14

Readme

HTML组件预编译系统

回归本源,只做纯粹的HTML。使用组件方式拼装HTML。

安装

npm install hcs -g

使用组件

系统对页面中的组件进行预编译,实现HTML组件化

安装组件

组件计划采用文件夹方式管理,也可选采用依赖方式,由组件开发者设定组件git地址。

将下载好的组件复制到项目中为组件设置的文件夹即可,文件夹可随意命名,默认组件目录名称为HCSLib

使用方法

在HTML中的使用方法

假设已安装了一个名为component的组件,直接在HTML中作为标签使用即可

<!-- index.html -->
<component var-name="component_obj" data-a="a" data-b="b">
	something or other component label
</component>

对于包含有循环内容的组件,组件将对组件内的第一级子元素进行遍历,例如:

<!-- index.html -->
<component var-name="component_obj" data-a="a" data-b="b">
    <div class="anyClass">
	    something or other component label
    </div>
    <h1 class="anyClass">
	    something or other component label
    </h1>
    <div>
	    something or other component label
    </div>
</component>

在js中的使用方法

如果要使用组件对象,则在组件属性中增加var-name属性,然后即可在js代码中使用该名称即可。因此,用于为组件导出对象的var-name属性命名一定要符合js变量命名规则

<!-- index.html -->
<component var-name="component_obj">
	something or other component label
</component>

编译器提供了document.ready方法,组件对象在该方法中使用,支持队列,如下所示:

// user script
document.ready(function(){
  // TODO: some init func
  component_obj.someMethod();
});
document.ready(function(){
  // TODO: some other init func
});

属性

组件可以通过标签中的data-*属性向组件传递数据

<!-- index.html -->
<component var-name="component_obj" data-a="a" data-b="b">
	something or other component label
</component>

帮助

组件可以通过增加help属性获取组件帮助。

  • 设置help属性后,组件中的其他属性失效
  • 设置help属性后,组件内部的HTML代码全部失效,仅显示帮助信息
<!-- index.html -->
<component help="true" var-name="component_obj" data-a="a" data-b="b">
	something or other component label
</component>

编译

随后执行hcs -in src -out build -lib componentsPath即可在build目录生成编译的文件,文件结构如下:

  • build

    • index.html
    • js/index_hcs.js
    • css/index_hcs.css

js/index_hcs.jscss/index_hcs.css中分别集成了component组件所使用的js和css代码。

--lib componentsPath表示组件文件所在的路径,默认路径为./HCSLib

配置文件-HCSConf.json

除了在命令行输入参数外,也可以使用配置文件方式进行编译,如hcs -conf demo/confDir ,默认路径为当前路径,配置文件名固定为HCSConf.json

// HCSConf.json
{
  "in" : "src",
  "out": {
    "root": "build",
    "html" : "",
    "js" : "js",
    "css" : "css"
  },
  "lib" : "HCSLib",
  "resource": {
    "root": "src",
    "path": [
      "js",
      "rs"
    ]
  },
  "watch": 60000
}
  • in:输入目录,所有被编译的文件都在该目录下
  • out:编译文件输出目录,也可以直接设置为字符串,如"out2" : "build",此时root默认为"build",js默认为"js",css默认为"css",html默认为""。
    • root:用于标记根路径,主要在复制额外资源文件时使用。
  • lib:组件库目录
  • resource:资源目录,所有资源目录将被复制到输出目录中html的同级目录下。
    • root:根路径,仅用于定位资源,不参与输出目录的写入
    • path:资源相对路径,用于定位资源,并且在输出目录中也会按照该路径写入
  • watch:文件监听选项,该选项设置的是监听间隔时长,单位ms。

创建组件

您可以自由的创建组件,并将组件集成到您的HTML当中。

组件的文件结构

  • componentName**[文件夹]**

    • config.json

      // 组件配置文件,可配置依赖项
      // 定义数据传递方式,如html直接写入或js动态获取
      {
        "version": "1.0.0",
        "name": "组件名称",
        "description": "描述",
        "initJs" : "var {{autoVarName}} = new componentName({{params}});{{autoVarName}}.init();",
        "export" : true,
        "help" : "<p>这里为使用者提供帮助信息,当组件标签中含有help属性时,编译后的文件中将会显示这段文字</p><p>因为是直接输出到HTML文档中,因此可以使用任何支持的HTML标签和css样式</p>"
      }
      • initJs: 用于初始化的js代码
        • {{autoVarName}}为默认字段,每个初始化代码中最多有一个{{autoVarName}},编译后会被替换为动态的变量名称
        • {{params}}为参数字段,编译器会将组件的data-*的属性全部整合到一个对象中传入,如果组件含有id属性,id属性也会被整合到参数对象中,键值为id。该属性与data-id互相冲突,请避免使用data-id属性传递参数。
      • export: 是否含有对外使用的js对象,如果有值,则编译时会检查组件的var-name属性,并使用var-name属性的值作为变量名。注意:当export=true并且编译器发现组件含有var-name属性时,编译器会自动将加入{{varName}} = {{autoVarName}},并将代码加入到js文件中,此时要求initJS字段中必须含有{{autoVarName}}
    • componentName.html

      <!-- 组件HTML内容模板 -->
      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8">
          <title>componentName</title>
          <link rel="stylesheet" href="componentName.css">
          <script src="componentName.js"></script>
        </head>
        <body>
          <!-- body内部为组件内容,body最多只能有一个子元素 -->
          <div>
            <span>Hello world!</span>
            <div>
              {{content}}
            </div>
          </div>
        </body>
      </html>

      如果组件含有循环体,使用{{loop}}和{{/loop}}标签标识循环体,{{content}}必须在{{loop}}和{{/loop}}中间使用。

      <!-- 组件HTML内容模板 -->
      <!DOCTYPE html>
      <html>
        <head>
          <meta charset="utf-8">
          <title>componentName</title>
          <link rel="stylesheet" href="componentName.css">
          <script src="componentName.js"></script>
        </head>
        <body>
          <!-- body内部为组件内容 -->
          <div>
            <span>Hello world!</span>
            {{loop}}
            <div>
              {{content}}
            </div>
            {{end}}
          </div>
        </body>
      </html>

    • componentName.js js脚本一定有且只有一个类,不允许有任何在这个类以外代码。创建类实例请在config.json文件中的initJS字段创建。

      类名必须为componentName,与组件名称保持一致

      /** debug **/
      // 这部分代码用于组件单独调试,不会加载到实际输出中
      var component = new componentName(1, 2);
      /** end **/
      // componentName类构造函数
      function componentName(x, y) {
        this.x = x;
        this.y = y;
      }
      componentName.prototype.showColor = function() {
        alert(this.color);
      };
      // 或使用class
      class componentName {
        constructor(x, y) {
          this.x = x;
          this.y = y;
        }
        toString() {
          return '(' + this.x + ', ' + this.y + ')';
        }
      }

    • componentName.css

      html,body{padding: 0}

待增加

  • 组件依赖管理
    • 依赖的其他组件
    • 依赖的js和css库