1下载

使用 coolie demo 命令下载本 demo。

  1. coolie demo 6

2静态资源标签

以下方式引用的静态资源会被构建:

  • imgvideoaudioembedsource 标签的 src 属性
  • link 标签的 href 属性
  • object 标签的 data 属性
  • source 标签的 srcset 属性
    不必构建的标签,添加coolieignore属性即可,如:
  1. <img src="./demo1.png">
  2. <img src="./demo1.png" coolieignore>

构建之后

  1. <img src="/static/res/xxxxoooo1.png">
  2. <img src="./demo1.png">

3外链的脚本、样式

4内联的脚本、样式

内联的脚本,指的是使用script标签包裹起来的脚本内容,也同样会被压缩处理。除非,该script指定了coolieignore属性,或者type属性值不是脚本

js type 值有:

  • 空值
  • javascript
  • text/javascript
  • text/ecmascript
  • text/ecmascript-6
  • text/jsx
  • application/javascript
  • application/ecmascript
  1. <script>var abc = '这里的 script 会被构建处理';</script>
  2. <script coolieignore>var abc = '这里的 script 不会被构建处理';</script>

内联的样式,指的是使用style标签包裹起来的样式内容,也同样会被压缩处理、版本管理。除非,该style指定了coolieignore属性,或者type属性值不是样式

5内嵌的样式

内嵌的样式,指的是标签里的style属性里的样式内容,也同样会被压缩处理、版本管理。

  1. <div style="background: url('./demo.png');"></div>
  2. <div style="background: url('/static/img/demo.png');"></div>

构建之后:

  1. <div style="background: url('/static/res/xxxxoooo1.png');"></div>
  2. <div style="background: url('/static/res/xxxxoooo2.png');"></div>

6预格式文本

pretextarea,以及添加了coolieignore或不符合脚本、样式的scriptstyle标签都会保留原始的文本格式。如:

  1. <pre>
  2. 预格式文本1
  3. </pre>
  4. <script type="text/plain">
  5. 预格式文本2
  6. </script>

构建之后,格式不会变化:

  1. <pre>
  2. 预格式文本1
  3. </pre><script type="text/plain">
  4. 预格式文本2
  5. </script>

需要压缩 templatescript[type="template"]内容,使用 coolie-html-tag-template

需要保护 html 中内嵌的 PHP 代码,使用 coolie-html-embed-php

7注释

并不是所有的注释都会被删除的,具体参考以下几条:

7.1单行注释会被删除

  1. <!--会被删除-->

7.2非单行注释会被保留

  1. <!--
  2. 不会被删除
  3. -->

7.3开头为-的多行注释会被删除

  1. <!--
  2. - 会被删除
  3. -->

8demo

8.1初始化目录

新建coolie-demo6目录:

  1. coolie-demo6
  2. └── webroot-dev
  3. 1 directory, 0 files

8.2初始化文件

新建index.html文件:

  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <style>
  4. body{
  5. background: #eee;
  6. }
  7. </style>
  8. <img src="coolie.png">
  9. <h1>Hello coolie-demo6</h1>
  10. <script>
  11. window.onload = function() {
  12. alert('Hello coolie6');
  13. };
  14. </script>

此时的目录结果为:

  1. .
  2. └── webroot-dev
  3. ├── coolie.png
  4. └── index.html
  5. 1 directory, 2 files

8.3构建前运行

使用 HTML 构建(demo6) - 图1sts 执行:

  1. cd src
  2. sts
  3. sts >> A static server is running.
  4. open >> http://172.22.252.118:57564

HTML 构建(demo6) - 图2

8.4前端构建配置

使用coolie init -c生成coolie.config.js(前端构建工具的配置文件):

  1. coolie init -c
  2. ┌────────────────────────────────────┐
  3. coolie-cli
  4. coolie@1.6.4
  5. The front-end development builder.
  6. └────────────────────────────────────┘
  7. init success >> /coolie-demo3/webroot-dev/coolie.config.js

修改coolie.config.js为:

  1. /**
  2. * ======================================================
  3. * coolie-cli 配置文件 `coolie.config.js`
  4. * 使用 `coolie init -c` 生成 `coolie.config.js` 文件模板
  5. * 当前配置文件所在的目录为构建的根目录
  6. *
  7. * @link http://coolie.ydr.me/guide/coolie.config.js/
  8. * @author ydr.me
  9. * @version 1.6.4
  10. * @create 2016-01-26 14:01:05
  11. * =======================================================
  12. */
  13. 'use strict';
  14. module.exports = function (coolie) {
  15. // coolie 配置
  16. coolie.config({
  17. // 是否在构建之前清空目标目录
  18. clean: true,
  19. // 目标配置
  20. dest: {
  21. // 目标目录,相对于当前文件
  22. dirname: '../webroot-pro/',
  23. // 目标根域
  24. host: '',
  25. // 版本号长度
  26. versionLength: 32
  27. },
  28. // js 构建
  29. js: {
  30. // 入口模块,相对于当前文件
  31. main: [
  32. // 支持 glob 语法
  33. // './static/js/app/**/*.js'
  34. //【1】
  35. ],
  36. // coolie-config.js 路径,相对于当前文件
  37. //【2】
  38. 'coolie-config.js': null,
  39. // js 文件保存目录,相对于 dest.dirname
  40. dest: './static/js/',
  41. // 分块配置
  42. chunk: []
  43. },
  44. // html 构建
  45. html: {
  46. // html 文件,相对于当前文件
  47. src: [
  48. // 支持 glob 语法
  49. //【3】
  50. 'index.html'
  51. ],
  52. // 是否压缩
  53. minify: true
  54. },
  55. // css 构建
  56. css: {
  57. // css 文件保存目录,相对于 dest.dirname
  58. dest: './static/css/',
  59. // css 压缩配置
  60. minify: {
  61. compatibility: 'ie7'
  62. }
  63. },
  64. // 资源
  65. resource: {
  66. // 资源保存目录,相对于 dest.dirname
  67. dest: './static/res/',
  68. // 是否压缩
  69. minify: true
  70. },
  71. // 原样复制文件,相对于当前文件
  72. copy: [
  73. // 支持 glob 语法
  74. // './favicon.ico',
  75. // './robots.txt'
  76. //【4】
  77. ]
  78. });
  79. // 使用 coolie 中间件
  80. // coolie.use(require('coolie-*'));
  81. // 自定义 coolie 中间件
  82. //coolie.use(function (options) {
  83. // // do sth.
  84. // return options;
  85. //});
  86. };

修改点:

  • 【1】:去掉了入口模块,此处没有用到模块化
  • 【2】:模块配置文件也没有,设置为 null
  • 【3】:修改需要构建的 html 文件路径
  • 【4】:去除了原样复制文件配置
    细心的同学可能发现了,配置文件基本没什么变化。

此时的目录结构为:

  1. .
  2. └── webroot-dev
  3. ├── coolie.config.js
  4. ├── coolie.png
  5. └── index.html
  6. 1 directory, 3 files

8.5前端构建

  1. coolie build
  2. ┌────────────────────────────────────┐
  3. coolie-cli
  4. coolie@1.6.4
  5. The front-end development builder.
  6. └────────────────────────────────────┘
  7. 1/6 >> parse coolie config
  8. coolie config >> /coolie-demo6/webroot-dev/coolie.config.js
  9. src dirname >> /coolie-demo6/webroot-dev
  10. dest dirname >> /coolie-demo6/webroot-pro/
  11. 2/6 >> copy files
  12. copy files >> no files are copied
  13. 3/6 >> build main module
  14. build app >> no main modules
  15. 4/6 >> override coolie-config.js
  16. overide config >> `coolie-config.js` is not defined
  17. 5/6 >> build html
  18. >> /coolie.png
  19. >> /index.html
  20. 6/6 >> generate a resource relationship map
  21. >> ../webroot-pro/coolie-map.json
  22. build success >> past 147ms

构建之后的目录结构为:

  1. .
  2. ├── webroot-dev
  3. ├── coolie.config.js
  4. ├── coolie.png
  5. └── index.html
  6. └── webroot-pro
  7. ├── coolie-map.json
  8. ├── index.html
  9. └── static
  10. └── res
  11. └── 7d9bbb425d679ca6c75f1cbbc66785fa.png
  12. 4 directories, 6 files

8.6构建后运行

  1. cd ../webroot-pro
  2. sts
  3. sts >> A static server is running.
  4. open >> http://172.22.252.118:57838

HTML 构建(demo6) - 图3

8.7构建结果分析

8.7.1index.html

表示index.html引用了一个资源文件coolie.png

来看看index.html

  1. <!doctype html><meta charset="utf-8"> <style>body{background:#eee}</style> <img src="/static/res/7d9bbb425d679ca6c75f1cbbc66785fa.png"><h1>Hello coolie-demo6</h1> <script>window.onload=function(){alert("Hello coolie6")};</script>
  2. <!--coolie build-->

明显可见,<style><script>标签里的内容都经过了压缩,并且也替换了<img>src属性。

8.7.2img

图片被重名后放在static/res下。

9github

HTML 构建(demo6) - 图4github.com

原文: https://coolie.ydr.me/guide/build-html