端技术范围不断发展,前端开发不只限于直接编写html,css和javascript,Web应用日益庞大,代码也更加庞大,所以许多新的思想(例如模块化和工程化等)和框架(React和Vue等),以及新的语言(Es6 TypeScript)随之出现,而构建工具则承担起了中间的桥梁做用。javascript
构建工具最直接的做用是:将源码转换成可执行的js
,css
和html
,具体包括:css
构建实际上是工程化和自动化思想的再前端的体现:将一系列流程用代码自动去实现,解放生产力。html
npm是nodejs附带的包管理器,npm script是npm内置的一个功能,容许在package.json
文件里面使用script
字段定义任务:前端
{ "scripts":{ "dev":"node dev.js", "pub":"node build.js" } }
在这里,一个属性对应一段shell脚本,原理是经过调用shell去运行脚本命令。java
module.exports = function(grunt){ //插件的配置信息 grunt.initConfig({ uglify:{ app_task:{ files:{ 'build/app.min.js':['lib/index.js','lib/test.js'] } } } }) ... }
基于流的自动化构建工具。除了能够管理和执行任务,还支持监听读写文件。简单例子:node
var gulp = require('gulp'); //引用基础模块 var uglify = require('gulp-uglify'); //js压缩模块 gulp.task('script',function(){ //启动任务script gulp.src('js/*.js') //找到文件 .pipe(uglify()) //压缩文件 .pipe(gulp.dest('dist/js')) //另存压缩文件 }); //监听 gulp.task('auto',function () { gulp.watch('js/*.js',['script']); //监听script任务 gulp.watch('css/*.css',['css']); //监听css任务 gulp.watch('images/*.*',['images']); //监听images任务 });
fis3相对于前面的工具,集成了Web开发中经常使用的构建功能:webpack
match
配置压缩器,实现前端工程优化CssSprite
(雪碧图)配置,合并多个css导入的图片到一个图片,减小http请求webpack是一个打包模块化js的工具,在webpack里,一切文件都是模块,经过Loader转换文件,经过plugin注入钩子,最后输出由多个模块组成的文件。webpack专一于构建模块化项目。es6
Rollup是一个相似于Webpack模块打包工具,但专一于ES6的模块化。web
Tree Shaking
(简单介绍剔除无效代码,稍微详细点就是能够去除已经被定义却没被使用的代码并进行Scope Hoisting
(做用域提高),以减少输出文件的大小和提高运行性能。)code Spliting
(对打包生成的bundle.js文件进行分割成chunk
块),因此没有模块加载、执行和缓存的代码。好处是打包js库时,文件更小,可是功能不够完善parcel是一款刚诞生不久的新型打包器,而且短短几周内就得到大量赞同。shell
当项目比较庞大时,须要引入不一样的库,带来了如下问题:
不一样库命名空间冲突(例如jq和zepto都使用了window.$)
库之间有依赖,须要控制加载顺序
须要管理库的版本
这种状况下,模块化的思想出现了:将复杂系统分割成多个模块以方便开发。 主要的模块划规范:
一种js模块化规范,commonJS的核心是经过requrire
方法,同步加载所依赖的其余模块,经过module.exports
导出须要的接口,具体使用方式在此不深刻
另外一种js模块化规范,与 commonJS的关键区别是异步加载所依赖的模块。AMD主要针对浏览器环境的模块化,表明实现是requirejs
ES6在语言层面实现模块化,经过使用import
和export
导入和导出模块。ES6的模块化将要逐渐取代Commonjs和AND规范,是模块化的终极解决方案。
前端工程化的意义,是为了提升编码->测试->维护 的运行效率,主要从开和部署两方面来入手:开发方面须要作好代码规范和开发模块化;部署阶段的主要流程包括:
工程化就是借助构建工具实现流程自动化,而前端自动化能够理解为在工程化上作更进一步的自动化。
从前文对构建工具的介绍能够看出,这里的性能优化主要如下方面:
Sprite
(雪碧图)技术热重载也就是自动刷新,主要是监听本地源代码变化,自动从新构建和刷新浏览器,随着新的技术框架的出现,例如Vue
,React
等,这门技术也基本成为了开发标配。
若是内容有错误的地方欢迎指出(以为看着不理解不舒服想吐槽也彻底没问题);若是对你有帮助,欢迎点赞和收藏,转载请征得赞成后著明出处,若是有问题也欢迎私信交流,主页有邮箱地址
参考资料,吴浩麟《深刻浅出 Webpack》