引子的引子
第一次写博客,本文是写给和我一样的小白的,大牛请谨慎食用,欢迎拍砖。
引子
随着Node.js 4.0 的发布,这次是nodejs和iojs合并后的第一个稳定版本。关于nodejs和iojs的那点事可以看这个Node.js与io.js那些事儿 ,天下大势,分久必合,合久必分。总之最后结局是好的。
Node.js是JavaScript称霸全平台的伟大的一步,当然对于我们普通前端小白并不太关心JavaScript会怎么发展,我们只想 高高兴兴上班 平平安安回家,所谓老板和我谈理想,我说我的理想是不上班。所以我们更多追求的是效率和质量。尽量在下班前把今天的任务写完。
前端自动化
这个标题有点大,所谓自动化就是把我们的双手从无意义的重复劳动解放出来,可以干其他事(嘿嘿嘿)。相信入门了的前端都会有一款自己使用熟的css预处理器,如果还不知道预处理器是啥玩意?赶紧戳这里,珍爱生命,早用早享受,这里拿我用熟的LESS举例。我使用LESS预编译CSS分三个时期。
第一时期,less.js直接引入浏览器
<link rel="stylesheet/less" href="example.less" />
<script src="lesscss-1.4.0.min.js"></script>
嗯,然后chrome直接本地不能调试?!WTF?一查文档
需要特别注意的是,由于浏览器端使用时是使用ajax来拉取.less文件,因此直接在本机文件系统打开(即地址是file://开头)或者是有跨域的情况下会拉取不到.less文件,导致样式无法生效。
这里有两个解决方案,一是换浏览器,最新的火狐是支持跨域的。二是用webstorm打开。然而对于我并不喜欢FF,和打开时间超过30s的webstorm。最后是这个方式并不能直接部署到服务器,容易出各种错,因此我进入了第二个时期。
第二时期,cmd编译less文件
这里要请出我们的神器 Nodejs 了。这里以windows开发平台为例,下载官方的msi文件,安装。
打开界面cmd输入
npm install -g less
很好,接下来只要cd到你的less文件夹
lessc example.less example.css
你的html里只需要引用这个css就可以了,很好!那么问题又来了,根本不是我要的效果嘛。万一你有多个less文件,咋办?而且你改一次就得lessc一次,能把你整奔溃。好在机智(懒惰)的歪果仁早就发现这个问题了,于是进入第三个时期自动化!
第三个时期,自动化编译less
先想想我们要什么效果,嗯,最好是less文件一改,就帮我编译,最好还能编译合并多个文件,当然能压缩下代码就更nice了。当然生产环境下方便调试我们是不会压缩代码的。
好,接下来请出我们的第二款神器 gulp!
npm install --g gulp
一般说gulp我们都会扯扯nodejs的stream,流开发,具体理论看这里,我简单理解为gulp不会重复帮我们编译less文件没有改变的部分,只编译改变的部分。简直太高大上了,嗨起来!
嗨回来我们先来看看gulp是如何做到上面的要求的。当然我们需要规范我们的编程环境。
建立如图的目录结构
然后cd到你的目录执行
npm init //懒得写package.json,这里会跳出各种填空题,按需填写。
npm install gulp --save-dev //这里开始装插件gulp,--save-dev 将存入package.json
很好已经和我们的目标很接近了,然后在根目录新建gulpfile.js ,这个文件是我们自动化的主文件。把下面的代码复制到这个文件(最好自己手打一遍加深印象)
var gulp = require('gulp'); //
var concat = require('gulp-concat'); //合拼文件的插件
var less = require('gulp-less'); //编译less
var plumber = require('gulp-plumber'); //和下面这个构成less编译报错插件
var notify = require('gulp-notify');
gulp.task('compileLess',function(){ //task传二个参数,第一个是这个任务的名字,第二个是执行的函数
gulp.src("./source/less/*.less") //你的less文件放在哪里
.pipe(plumber(
{errorHandler: notify.onError('Error: <%= error.message %>')}
))//报错触发
.pipe(less())//编译你的less文件
.pipe(concat("base.css"))//合拼less文件并重命名为base.css
.pipe(gulp.dest("./build/css"))//编译后的css文件放哪啊
})
到这里我们已经完成了一大部分,运行
gulp compileLess
很棒!已经可以合拼编译less文件并且less报错的时候不会中断。接下来就是自动编译了
gulp.task('watchLess',function(){
gulp.watch("./source/less/*.less",["compileLess"]);
//简单粗暴的函数名watch,帮我盯着!第一个参数是盯着的位置,第二个是要执行的task
//这里的所有参数都是可以通过数组传值的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。