將less編譯成css的gulp插件


簡介:
gulp是前端開發過程當中對代碼進行構建的工具,是自動化項目的構建利器;她不只能對網站資源進行優化,並且在開發過程當中不少重複的任務可以使用正確的工具自動完成;使用她,咱們不只能夠很愉快的編寫代碼,並且大大提升咱們的工做效率。javascript

gulp是基於Nodejs的自動任務運行器,她能自動化地完成 javascript/coffee/sass/less/html/image/css 等文件的的測試、檢查、合併、壓縮、格式化、瀏覽器自動刷新、部署文件生成,並監聽文件在改動後重復指定的這些步驟。在實現上,她借鑑了Unix操做系統的管道(pipe)思想,前一級的輸出,直接變成後一級的輸入,使得在操做上很是簡單。經過本文,咱們將學習如何使用Gulp來改變開發流程,從而使開發更加快速高效。css

gulp 和 grunt 很是相似,但相比於 grunt 的頻繁 IO 操做,gulp 的流操做,能更快地更便捷地完成構建工做。html

本示例以gulp-less爲例(將less編譯成css的gulp插件)展現gulp的常規用法,只要咱們學會使用一個gulp插件後,其餘插件就差看看其幫助文檔了。讓咱們一塊兒來學習gulp吧! ^_^前端

目錄:
  0一、安裝nodejs
  0二、使用命令行
  0三、npm介紹
  0四、選裝cnpm
  0五、全局安裝gulp
  0六、新建package.json文件
  0七、本地安裝gulp插件
  0八、新建gulpfile.js文件
  0九、運行gulp
  十、總結java

一、安裝nodejs
  1.一、說明:gulp是基於nodejs,理所固然須要安裝nodejs;
  1.二、安裝:打開nodejs官網,點擊碩大的綠色Download按鈕,它會根據系統信息選擇對應版本(.msi文件)。而後像安裝QQ同樣安裝它就能夠了(安裝路徑隨意)。node

二、使用命令行
  node -v查看安裝的nodejs版本,出現版本號,說明剛剛已正確安裝nodejs。PS:未能出現版本號,請嘗試註銷電腦重試;
  npm -v查看npm的版本號git

三、npm介紹
  3.一、說明:npm(node package manager)nodejs的包管理器,用於node插件管理(包括安裝、卸載、管理依賴等);
  3.二、使用npm安裝插件:命令提示符執行npm install <name> [-g] [--save-dev];
    3.2.一、<name>:node插件名稱。例:npm install gulp-less --save-dev
    3.2.二、-g:全局安裝。將會安裝在C:\Users\Administrator\AppData\Roaming\npm,而且寫入系統環境變量; 非全局安裝:將會安裝在當前定位目錄; 全局安裝能夠經過命令行在任何地方調用它,本地安裝將安裝在定位目錄的node_modules文件夾下,經過require()調用;
    3.2.三、--save:將保存配置信息至package.json(package.json是nodejs項目配置文件);
    3.2.四、-dev:保存至package.json的devDependencies節點,不指定-dev將保存至dependencies節點;
    3.2.五、爲何要保存至package.json?由於node插件包相對來講很是龐大,因此不加入版本管理,將配置信息寫入package.json並將其加入版本管理,其餘開發者對應下載便可(命令提示符執行npm install,則會根據package.json下載全部須要的包)。
  3.三、使用npm卸載插件:npm uninstall <name> [-g] [--save-dev] PS:不要直接刪除本地插件包
  3.四、使用npm更新插件:npm update <name> [-g] [--save-dev]
    3.4.一、更新所有插件:npm update [--save-dev]
  3.五、查看npm幫助:npm help
  3.六、當前目錄已安裝插件:npm listnpm

四、選裝cnpm
  4.一、說明:由於npm安裝插件是從國外服務器下載,受網絡影響大,可能出現異常,若是npm的服務器在中國就行了,因此咱們樂於分享的淘寶團隊幹了這事。32個!來自官網:「這是一個完整 npmjs.org 鏡像,你能夠用此代替官方版本(只讀),同步頻率目前爲 10分鐘 一次以保證儘可能與官方服務同步。」;
  4.二、官方網址:http://npm.taobao.org;
  4.三、安裝:命令提示符執行npm install cnpm -g --registry=https://registry.npm.taobao.org; 注意:安裝完後最好查看其版本號cnpm -v或關閉命令提示符從新打開,安裝完直接使用有可能會出現錯誤;
注:cnpm跟npm用法徹底一致,只是在執行命令時將npm改成cnpm(如下操做將以cnpm代替npm)。json

五、全局安裝gulp
  5.一、說明:全局安裝gulp目的是爲了經過她執行gulp任務;
  5.二、安裝:命令提示符執行cnpm install gulp -g;
  5.三、查看是否正確安裝:命令提示符執行gulp -v,出現版本號即爲正確安裝。gulp

六、新建package.json文件
  6.一、說明:package.json是基於nodejs項目必不可少的配置文件,它是存放在項目根目錄的普通json文件;
  6.二、它是這樣一個json文件(注意:json文件內是不能寫註釋的,複製下列內容請刪除註釋):

{
  "name": "lesstest",
  "version": "1.0.0",
  "description": "just for test",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "http://git.oschina.net/irandom/gulp"
  },
  "keywords": [
    "gulp"
  ],
  "author": "tony.zeng",
  "license": "ISC",
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-less": "^3.1.0"
  }
}

  6.三、固然咱們能夠手動新建這個配置文件,可是做爲一名有志青年,咱們應該使用更爲效率的方法:命令提示符執行cnpm init

  6.四、查看package.json幫助文檔,命令提示符執行cnpm help package.json 特別注意:package.json是一個普通json文件,因此不能添加任何註釋。

七、本地安裝gulp插件
  7.一、安裝:定位目錄命令後提示符執行cnpm install --save-dev
  7.二、本示例以gulp-less爲例(編譯less文件),命令提示符執行cnpm install gulp-less --save-dev
  7.三、將會安裝在node_modules的gulp-less目錄下,該目錄下有一個gulp-less的使用幫助文檔README.md;
  7.四、爲了能正常使用,咱們還得本地安裝gulp:cnpm install gulp --save-dev;
  PS:細心的你可能會發現,咱們全局安裝了gulp,項目也安裝了gulp,全局安裝gulp是爲了執行gulp任務,本地安裝gulp則是爲了調用gulp插件的功能。

八、新建gulpfile.js文件(重要)
  8.一、說明:gulpfile.js是gulp項目的配置文件,是位於項目根目錄的普通js文件(其實將gulpfile.js放入其餘文件夾下亦可)。
  8.二、它大概是這樣一個js文件

//導入工具包 require('node_modules裏對應模塊')
var gulp = require('gulp'), //本地安裝gulp所用到的地方
    less = require('gulp-less');
 
//定義一個testLess任務(自定義任務名稱)
gulp.task('testLess', function () {
    gulp.src('src/less/index.less') //該任務針對的文件
        .pipe(less()) //該任務調用的模塊
        .pipe(gulp.dest('src/css')); //將會在src/css下生成index.css
});
 
gulp.task('default',['testLess', 'elseTask']); //定義默認任務

//gulp.task(name[, deps], fn) 定義任務  name:任務名稱 deps:依賴任務名稱 fn:回調函數
//gulp.src(globs[, options]) 執行任務處理的文件  globs:處理的文件路徑(字符串或者字符串數組) 
//gulp.dest(path[, options]) 處理完後文件生成路徑

九、運行gulp
  9.一、說明:命令提示符執行gulp 任務名稱;
  9.二、編譯less:命令提示符執行gulp testLess;
  9.三、當執行gulp default或gulp將會調用default任務裏的全部任務[‘testLess’,’elseTask’]。

十、總結
安裝nodejs => 新建package.json文件 => 全局和本地安裝gulp => 安裝gulp插件 => 新建gulpfile.js文件 => 經過命令提示符運行gulp任務。

 

附一份gulpfile.js文件:

 1 // 引入組件
 2 var gulp = require('gulp'),                    // 引入Gulp
 3     minifycss = require('gulp-minify-css'),    // css壓縮
 4     uglify = require('gulp-uglify'),        // js壓縮
 5     concat = require('gulp-concat'),        // 文件合併
 6     rename = require('gulp-rename'),        // 文件改名
 7     less = require('gulp-less'),            // less2css
 8     notify = require('gulp-notify');        // 提示信息
 9 
10 // less to css
11 gulp.task('less2css', function () {
12     return    gulp.src('./src/less/*.less')
13             .pipe(less())
14             .pipe(gulp.dest('./src/css'))
15             .pipe(notify({ message: 'less2css task ok' }));
16 });
17 
18 // 合併、壓縮、重命名css
19 gulp.task('css', function() {
20     return    gulp.src('src/css/*.css')
21             .pipe(concat('main.css'))
22             .pipe(gulp.dest('./dest/css'))
23             .pipe(rename({ suffix: '.min' }))
24             .pipe(minifycss())
25             .pipe(gulp.dest('./dest/css'))
26             .pipe(notify({ message: 'css task ok' }));
27 });
28 
29 // 合併、壓縮js文件
30 gulp.task('js', function() {
31 
32     return    gulp.src('src/js/*.js')
33             .pipe(concat('main.js'))
34             .pipe(gulp.dest('dest/js'))
35             .pipe(rename({ suffix: '.min' }))
36             .pipe(uglify())
37             .pipe(gulp.dest('dest/js'))
38             .pipe(notify({ message: 'js task ok' }));
39 });
40 
41 // 默認任務
42 gulp.task('default', function(){
43 
44   gulp.run('less2css', 'css', 'js');
45  
46 //  // Watch .css files
47 //  gulp.watch('src/css/*.css', ['css']);
48 // 
49 //  // Watch .js files
50 //  gulp.watch('src/js/*.js', ['js']);
51 
52 });
53  
54 //定義一個testLess任務(自定義任務名稱)
55 //gulp.task('testLess', function () {
56 //    gulp.src('src/less/index.less') //該任務針對的文件
57 //        .pipe(less()) //該任務調用的模塊
58 //        .pipe(gulp.dest('src/css')); //將會在src/css下生成index.css
59 //});
60 // 
61 //gulp.task('default',['testLess']); //定義默認任務
相關文章
相關標籤/搜索