本文只在前端构建维度上讨论 webpack 和 coolie,分析他们两个工具谁更好、更优秀。关于如何使用 webpack 和 coolie,暂且不在本文讨论范围内。

什么是前端构建

把 less 文件编译成 css 文件属于构建?把 coffee 编译成 js 属于构建?压缩 JS、CSS 属于构建吗?合并 JS、CSS 属于构建吗?

为了方便比较,我们将前端构建分为以下几个部分和权重(满分 100 分),并定义前端开发中发布到生产环境的过程称之为前端构建。

#

构建内容

权重值

1

静态资源的合并与压缩

20 分

2

模块化构建

40 分

3

静态资源引用与版本管理

30 分

4

便捷与扩展性

10 分

接下来的几篇文章,就根据这个表格来逐一分析对比 webpack 和 coolie,到底孰优孰劣。

在静态资源的合并与压缩(满分 20 分)方面,分为以下两个维度

JS 的合并与压缩:10 分

CSS 的合并与压缩:10 分

#JS 的合并与压缩

准备以下文件和目录结构:

|-- demo

|-- src

||-- single1.js

|`-- single2.js

`-- index.html

single1.js

var abc = 1;

alert(abc);

single2.js

var def = 2;

alert(def);

index.html

webpack

需要新增配置文件webpack.config.js

var path = require("path");

module.exports = {

entry: ['./src/single1.js', './src/single2.js'],

output: {

path: path.join(__dirname, '../out'),

filename: 'single.js'

}

};

执行 webpack -p 之后(为了不影响阅读,加了断行):

!function(r){function t(n){if(e[n])return e[n].exports;

var o=e[n]={exports:{},id:n,loaded:!1};

return r[n].call(o.exports,o,o.exports,t),

o.loaded=!0,o.exports}

var e={};

return t.m=r,t.c=e,t.p="",t(0)}([function(r,t,e){e(1),

r.exports=e(2)},function(r,t){

var e=1;alert(e)},function(r,t){var e=2;alert(e)}]);

目标文件的目录结构为:

-- out

`-- single.js

coolie

需要新增配置文件,执行coolie json 生成(询问步骤省略,更多阅读参考http://coolie.ydr.me/begin/coolie.json.html)的文件为:

{

"js": {

"dest": "./src/"

},

"css": {

"dest": "./src/",

"minify": {

"compatibility": "ie7"

}

},

"html": {

"src": [

"./*.html"

],

"minify": true

},

"resource": {

"dest": "./src/",

"minify": true

},

"copy": [],

"dest": {

"dirname": "../dest/",

"host": ""

}

}

执行coolie build构建之后的目录结构为:

-- dest

|-- src

|`-- 6c762d4e4b7d1e9504281bc12abd65b9.js

|-- index.html

`-- relationship-map.json

构建生成的 JS 文件为6c762d4e4b7d1e9504281bc12abd65b9.js,内容为:

/*coolie@0.20.10*/

var abc=1;alert(abc);

var def=2;alert(def);

index.html 内容为:

生成的relationship-map.json(资源引用关系地图)内容为:

{

"index.html": {

"css": {},

"js": {

"src/6c762d4e4b7d1e9504281bc12abd65b9.js": [

"src/single1.js",

"src/single2.js"

]

},

"main": ""

}

}

一张图说明一切

总结

webpack

优点

只有一个配置文件:只需要写一个webpack.config.js即可,使用简单。

缺点

index.html 里引用的 JS 怎么办?无法处理

无法处理版本,修改了single1.js和single2.js导致内容变化。

合并压缩后的代码是什么鬼?比原始代码还长

其他构建要求需要修改配置文件

致命错误

原本single1.js和single2.js,分别需要向全局作用域注入abc和def两个属性,合并压缩之后导致该属性不复存在了,改变了 JS 执行的作用域

coolie

优点

以页面为导向,智能分析区间内的JS,进行合并压缩

有版本管理

生成资源引用关系地图

一次生成永久配置,不必重复修改配置

生成的内容简单明了,一行一个原始 JS 文件

压缩没有改变 JS 执行的作用域

同时压缩了 HTML 文件

缺点

配置稍微复杂

需要在 HTML 页面上标记

综,在静态资源的合并与压缩的 JS 文件的合并与压缩上,coolie 做的更好、更多、更简单、更漂亮,webpack 还留下了一个致命错误,coolie 胜出,得满分 10 分,webpack得 0 分。

webpack 合并压缩_文章 - coolie PK webpack 之一:JS 文件的合并与压缩 - FED社区相关推荐

  1. webpack 占位符_通过示例学习Webpack:占位符图像模糊

    webpack 占位符 by Kalalau Cantrell 通过Kalalau Cantrell 通过示例了解Webpack:占位符图像模糊 (Learn Webpack by Example: ...

  2. java删减pdf内容合并_[Java教程]Java基础之PDF文件的合并

    [Java教程]Java基础之PDF文件的合并 0 2017-07-28 00:00:45 1.首先下载一个jar包:pdfbox-app-1.7.1.jar 2.代码如下:package com;i ...

  3. js文件上传—图片压缩

    -需求- 前台上传图片过程中,需要在前台对图片进行压缩,然后传到后台. -限制- 使用现有现有后台文件上传处理代码,即:不可修改后台处理代码. -技术问题- js如何压缩图片,图片压缩后如何上传到后台 ...

  4. vue jsx webpack报错_从零开始,使用webpack高效搭建react工作流

    关注后,回复"1"获取文章案例源代码. 很多人想搭建一套属于自己的前端工作流:最开始的时候,我们的工作流萌芽是从写一个项目的时候,拷贝以前写过的一个项目文件夹改完直接使用开始的,后 ...

  5. webpack初体验_使用webpack打包js文件_json文件_使用webpack开发模式_生产模式打包---webpack工作笔记003

    我们首先去初始化一下npm npm init 然后package name 输入webpack_test 然后初始化npm以后,我们去 安装npm i webpack webpack-cli -g 全 ...

  6. python中合并列表_关于python:如何将两个列表合并到一个列表中?

    我有 a = [1, 2] b = ['a', 'b'] 我想要 c = [1, 'a', 2, 'b'] 号 @cdleary's answer stackoverflow.com/question ...

  7. 利用lz78编码实现对某字符序列的二元压缩_多媒体笔记(1):文件压缩的原理...

    多媒体(multimedia) 融合两种或两种以上媒体的人机互动的信息交流和传播媒体. 超文本(hypertext) 包含指向其他文档或文档元素的指针的电子文档.传统文本以线性方式组织,超文本以非线性 ...

  8. ffmpeg 分辨率 压缩_视频怎么在尽量不损害画质的前提下压缩?

    其实和视频画质和效果相关的参数主要是分辨率和码率以及帧率.帧率直接和画面的流畅度相关,分辨率和码率参数和画质直接相关. 帧率:指的的视频每秒钟播放的图片数目,帧率越小,那么你看到的视频就会越卡,动作就 ...

  9. git mr 怎样合并部分_系统掌握Git之—分离头指针与合并操作

    分离头指针 分离头指针表示我们在工作在没用分支的情况下,我们通过git log 打印日志,选择中间的一个commitId,然后进行checkout操作,git checkout 82fdac4baac ...

  10. 办公自动化:PDF文件合并器,用Python将多个PDF文件进行合并

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! Python源码.问题解答学习交流群:7731621 ...

最新文章

  1. 2021-05-27Series(三):Series和ndarray对比学习 转
  2. 为品牌管理增加检索名称和状态项
  3. docker基础知识之挂载本地目录
  4. 第 5 章 Spring AOP: Spring之面向方面编程
  5. 子类能否访问或覆盖父类的private方法
  6. createelement 设置id_还记得你的第一个网络ID是什么吗?
  7. python时间倒计时显示屏厂家_python 实现倒计时功能(gui界面)
  8. 分享十五个最佳jQuery幻灯插件和教程
  9. VS对.ini文件的操作
  10. Linux上机考试试题
  11. 蓝桥杯2019c语言b组试题,2020年7月B组C++蓝桥杯真题试水
  12. “配置系统未能初始化” 异常解决
  13. wifi辐射安全距离
  14. 再谈BOM和DOM(1):BOM与DOM概述
  15. [SP]梦网masterSP模式下的sp生存
  16. 微信小程序选择地址填写详细地址定位地点
  17. Ubuntu18.04安装TPLINK WDN5200H USB无线网卡驱动
  18. 电磁场与仿真软件(28)
  19. 无法进入BIOS解决
  20. 山下英子与家政学员亲密接触 深度解读断舍离生活美学

热门文章

  1. steam无法连接至计算机,无法连接至steam网络怎么办 无法连接至steam网络解决方法【图文】...
  2. 【线性代数(12)】线性方程组、方程组解的结构
  3. 高等数学—常见三角函数
  4. r语言 rgl 强制过程中_R语言中编写最小工作示例(MWRE)
  5. 硕士论文要求的重复率是多少?
  6. 刑法中关于计算机犯罪的定义,界定计算机犯罪概念的原则
  7. 项目中的“里程碑”就是我们常说的里程碑吗?
  8. “Warning: Potential Security Risk Ahead“解决方案
  9. AIC准则选三个变量的r语言代码
  10. Python3自然语言处理(5)——预处理