1. 程式人生 > >gulp對css、js、img的壓縮和css圖片的base64

gulp對css、js、img的壓縮和css圖片的base64

3.1、說明:npm(node package manager)nodejs的包管理器,用於node外掛管理(包括安裝、解除安裝、管理依賴等);

3.2、使用npm安裝外掛:命令提示符執行npm install <name> [-g] [--save-dev]

3.2.1、<name>:node外掛名稱。例:npm install gulp-less --save-dev

3.2.2、-g:全域性安裝。將會安裝在C:\Users\Administrator\AppData\Roaming\npm,並且寫入系統環境變數;  非全域性安裝:將會安裝在當前定位目錄;  全域性安裝可以通過命令列在任何地方呼叫它,本地安裝將安裝在定位目錄的node_modules資料夾下,通過require()呼叫;

3.2.3、--save:將儲存配置資訊至package.json(package.json是nodejs專案配置檔案);

3.2.4、-dev:儲存至package.json的devDependencies節點,不指定-dev將儲存至dependencies節點;一般儲存在dependencies的像這些express/ejs/body-parser等等。

3.2.5、為什麼要儲存至package.json?因為node外掛包相對來說非常龐大,所以不加入版本管理,將配置資訊寫入package.json並將其加入版本管理,其他開發者對應下載即可(命令提示符執行npm install,則會根據package.json下載所有需要的包,

npm install --production只下載dependencies節點的包)。

3.3、使用npm解除安裝外掛:npm uninstall <name> [-g] [--save-dev]  PS:不要直接刪除本地外掛包

3.3.1、刪除全部外掛:npm uninstall gulp-less gulp-uglify gulp-concat ……???太麻煩

3.3.2、藉助rimraf:npm install rimraf -g 用法:rimraf node_modules

3.4、使用npm更新外掛:npm update <name> [-g] [--save-dev]

3.4.1、更新全部外掛:npm update [--save-dev]

3.5、檢視npm幫助:npm help

3.6、當前目錄已安裝外掛:npm list

PS:npm安裝外掛過程:從http://registry.npmjs.org下載對應的外掛包(該網站伺服器位於國外,所以經常下載緩慢或出現異常),解決辦法往下看↓↓↓↓↓↓。

4、選裝cnpm

4.1、說明:因為npm安裝外掛是從國外伺服器下載,受網路影響大,可能出現異常,如果npm的伺服器在中國就好了,所以我們樂於分享的淘寶團隊幹了這事。來自官網:“這是一個完整 npmjs.org 映象,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證儘量與官方服務同步。”

4.2、官方網址:http://npm.taobao.org;

4.3、安裝:命令提示符執行npm install cnpm -g --registry=https://registry.npm.taobao.org;  注意:安裝完後最好檢視其版本號cnpm -v或關閉命令提示符重新開啟,安裝完直接使用有可能會出現錯誤;

注:cnpm跟npm用法完全一致,只是在執行命令時將npm改為cnpm(以下操作將以cnpm代替npm)。

5、全域性安裝gulp

5.1、說明:全域性安裝gulp目的是為了通過她執行gulp任務;

5.2、安裝:命令提示符執行cnpm install gulp -g

5.3、檢視是否正確安裝:命令提示符執行gulp -v,出現版本號即為正確安裝。

6、新建package.json檔案

6.1、說明:package.json是基於nodejs專案必不可少的配置檔案,它是存放在專案根目錄的普通json檔案;

6.2、它是這樣一個json檔案(注意:json檔案內是不能寫註釋的,複製下列內容請刪除註釋)

{
  "name": "20180101",
  "version": "1.0.0",
  "description": "",
  "main": "gulpfile.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-base64": "^0.1.2",
    "gulp-htmlmin": "^4.0.0",
    "gulp-imagemin": "^4.1.0",
    "gulp-livereload": "^3.8.1",
    "gulp-minify-css": "^1.2.4",
    "gulp-processhtml": "^1.2.0",
    "gulp-rev": "^8.1.1",
    "gulp-rev-collector": "^1.2.4",
    "gulp-uglify": "^3.0.0"
  }
}

6.3、當然我們可以手動新建這個配置檔案,但是作為一名有志青年,我們應該使用更為效率的方法:命令提示符執行cnpm init

6.4、檢視package.json幫助文件,命令提示符執行cnpm help package.json

特別注意:package.json是一個普通json檔案,所以不能新增任何註釋。

7、本地安裝gulp外掛

7.1、安裝:定位目錄命令後提示符執行cnpm gulp install --save-dev

7.2、本示例以gulp-less為例(編譯less檔案),命令提示符執行cnpm install gulp-less --save-dev

7.3、將會安裝在node_modules的gulp-less目錄下,該目錄下有一個gulp-less的使用幫助文件README.md;

PS:細心的你可能會發現,我們全域性安裝了gulp,專案也安裝了gulp,全域性安裝gulp是為了執行gulp任務,本地安裝gulp則是為了呼叫gulp外掛的功能。

8、新建gulpfile.js檔案(重要)

8.1、說明:gulpfile.js是gulp專案的配置檔案,是位於專案根目錄的普通js檔案(其實將gulpfile.js放入其他資料夾下亦可)。

8.2、它大概是這樣一個js檔案:

var gulp = require('gulp')
    cssmin = require('gulp-minify-css')             //css壓縮
    uglify = require('gulp-uglify')               //js壓縮
    imagemin = require('gulp-imagemin')            //圖片的壓縮
    base64 = require('gulp-base64')                //- 把小圖片轉成base64字串
    htmlmin = require('gulp-htmlmin')              //html的壓縮

//壓縮  css檔案   和base64 和檔名加md5字尾
gulp.task('testCssmin', function () {
    gulp.src('css/*.css')
        .pipe(base64())
        // .pipe(rev())               //檔名加md5字尾
        .pipe(cssmin())
        // .pipe(rev.manifest())         //rev-mainfest.json檔案,裡面是壓縮檔案的資訊
        .pipe(gulp.dest('dist/css'));
});

// 壓縮 js 檔案
gulp.task('script', function() {
    // 1. 找到檔案
    gulp.src('js/*.js')
    // 2. 壓縮檔案
        .pipe(uglify({ mangle: false }))
    // 3. 另存壓縮後的檔案
        .pipe(gulp.dest('dist/js'))
})
//壓縮  img檔案
gulp.task('testImagemin', function () {
    gulp.src('images/*.{png,jpg,gif,ico}')
        .pipe(imagemin({
            optimizationLevel: 5, //型別:Number  預設:3  取值範圍:0-7(優化等級)
            progressive: true, //型別:Boolean 預設:false 無失真壓縮jpg圖片
            interlaced: true, //型別:Boolean 預設:false 隔行掃描gif進行渲染
            multipass: true //型別:Boolean 預設:false 多次優化svg直到完全優化
        }))
        .pipe(gulp.dest('dist/images'));
});
//壓縮html檔案
gulp.task('testHtmlmin', function () {
    var options = {
        removeComments: true,//清除HTML註釋
        collapseWhitespace: true,//壓縮HTML
        collapseBooleanAttributes: true,//省略布林屬性的值 <input checked="true"/> ==> <input />
        removeEmptyAttributes: true,//刪除所有空格作屬性值 <input id="" /> ==> <input />
        removeScriptTypeAttributes: true,//刪除<script>的type="text/javascript"
        removeStyleLinkTypeAttributes: true,//刪除<style>和<link>的type="text/css"
        minifyJS: true,//壓縮頁面JS
        minifyCSS: true//壓縮頁面CSS
    };
    gulp.src('*.html')
        .pipe(htmlmin(options))
        .pipe(gulp.dest('dist/'));
});


// 監聽檔案的變化
/* gulp.task('watch', function() {
    livereload.listen();
    gulp.watch(['css/*.css'], ['testCssmin']);
    gulp.watch(['js/*.js'], ['script']);
    gulp.watch(['images/*.{png,jpg,gif,ico}'], ['testImagemin']);
    gulp.watch(['/*.html'], ['testHtmlmin']);
}); */
/* 合併上述我的方法 監控並執行任務 */
gulp.task('default', [
        'testCssmin',
        'script',
        'testImagemin',
        'testHtmlmin',
        // 'watch'
    ]
);