WebApp打包

当你准备好html + javascript + css并在本地运行成功后,并不是说可以直接放到服务器上万事大吉
严格说,可以直接放上去,用户也能够正常浏览使用,但是这里有一个问题

开发软件通常都是模块化的,会有许许多多的.js和.css,每一次获取目标文件都是浏览器进行一次http请求。这就是问题所在
传统语言开发的程序有编译这个过程,会把源代码从各个文件汇总为极简的机器码。做web开发一样需要这个过程,称之为构建
(JS诞生之初只是用来运行小脚本,没这个需要。但是一旦变为web app那就很有必要了)

构建说起来也是挺简单的,即把所有js汇总为一个js,通常称为bundle.js,然后html里就加载这一个
所有css也汇总为一个,然后html里就加载这个

但是一细想,也没那么容易
比如使用了许多js库,那就需要把所有的库都pull进来
如果使用了高级js特性,为了能够在之前老的浏览器里运行,需要转译
如果使用了原生js不支持的语法,也需要转译
源代码通常会比较冗余,这是为了开发方便。缩短源代码的同时保持功能一致有助于减少网络传输成本

为了方便构建,开发web app一般都有一个目录结构:
index.html
css/
res/
js/src
js/build
script/
最后一个script是用来存放构建流程的脚本,比如各个shell脚本。web app用到的脚本都在js里

构建一定是使用现成工具的。Babel负责转译,Browserify负责找出依赖项和拼接js,自己手写sh可以拼接css,uglify负责压缩js,cssshrink负责压缩css
还可以更进一步使用整套工具集,比如webpack