1. 程式人生 > >Gulp打包構建專案

Gulp打包構建專案

打包壓縮js,css,支援sass編譯成css,圖片壓縮,圖片組建成精靈圖,靜態檔案拷貝,實時監聽變化自動重新整理瀏覽器
//引入相關外掛
var gulp = require('gulp');
var rename = require('gulp-rename');   //檔案重新命名
var uglify = require('gulp-uglify');   //JS程式碼壓縮
var minCSS = require('gulp-clean-css'); //CSS程式碼壓縮
var autoprefixer = require('gulp-autoprefixer');  //新增瀏覽器字首
var clean   = require('gulp-clean');     //清空檔案
var cleanDest = require('gulp-clean-dest'); //清空dist目錄指定檔案
var changed = require('gulp-changed');  //僅僅傳遞更改過的檔案
var imagemin = require('gulp-imagemin');  //圖片壓縮
var spritesmith = require('gulp.spritesmith');  //PNG圖片合併成精靈圖
const filter = require('gulp-filter');   //js壓縮過濾器,排除已壓縮過的
var sass = require('gulp-sass');  //處理sass檔案
var browserSync = require('browser-sync'); //擁有實時過載伺服器
var reload = browserSync.reload;  //編譯後重新重新整理瀏覽器
var buffer = require('vinyl-buffer');
var merge = require('merge-stream');

var pageSrc = 'src/pages/**/*.html';
var pageDist = 'dist/pages/';
var jsSrc = 'src/js/**/*.js';
var jsDist = 'dist/js/';
var cssSrc = 'src/css/**/*.css';
var cssDist = 'dist/css/';
var sassSrc = 'src/sass/**/*.scss';
var sassDist = 'src/css/';
var imgSrc = 'src/images/*';
var imgDist = 'dist/images/';
var iconfontSrc = 'src/iconfont/*';
var iconfontDist = 'dist/iconfont/';
var staticSrc = 'src/static/*';
var staticDist = 'dist/static/';
var spriteSrc = 'src/images/*.png';
var spriteDist = 'src/images/sprite';

gulp.task('html', function() {  //拷貝html
    return gulp.src(pageSrc)
        .pipe(changed(pageDist))
        .pipe(cleanDest(pageDist))//先清空後生成
        .pipe(gulp.dest(pageDist))
        .pipe(reload({ stream:true }));
});

//對已經壓縮過的檔案進行過濾,不再壓縮
var  jsFilter = filter([jsSrc, '!src/js/**/*.min.js'], {restore: true});
gulp.task('js', function() {  //拷貝壓縮js
    return gulp.src(jsSrc)
        .pipe(changed(jsDist))
        .pipe(cleanDest(jsDist))//先清空後生成
        .pipe(jsFilter)
        // 這會輸出一個未壓縮過的版本
        .pipe(gulp.dest(jsDist))
        // 這會輸出一個壓縮過的並且重新命名未 foo.min.js 的檔案
        .pipe(uglify())
        .pipe(rename({ extname: '.min.js' }))
        .pipe(jsFilter.restore)
        .pipe(gulp.dest(jsDist))
        .pipe(reload({ stream:true }));
});
gulp.task('css', function() {  //拷貝壓縮css
    return gulp.src(cssSrc)
        .pipe(changed(cssDist))
        .pipe(cleanDest(cssDist))//先清空後生成
        .pipe(autoprefixer({
            browsers: ['last 2 versions'],
            cascade: false
        }))
        // 這會輸出一個未壓縮過的版本
        .pipe(gulp.dest(cssDist))
        .pipe(minCSS())
        .pipe(rename({ extname: '.min.css' }))
        .pipe(gulp.dest(cssDist))
        .pipe(reload({ stream:true }));
});
gulp.task('sass', function () {  //將sass檔案編譯成css
    return gulp.src(sassSrc)
        .pipe(changed(sassSrc))
        .pipe(cleanDest(sassDist))//先清空後生成
        .pipe(sass())
        .pipe(gulp.dest(sassDist))
        .pipe(reload({ stream:true }));
});

gulp.task('img', function() {  //拷貝壓縮圖片
    return gulp.src([imgSrc,'src/images/**/*'])
        .pipe(changed(imgSrc))
        .pipe(cleanDest(imgDist))//先清空後生成
        // 這會輸出一個未壓縮過的版本
        .pipe(imagemin([
            imagemin.gifsicle({interlaced: true}),
            imagemin.jpegtran({progressive: true}),
            imagemin.optipng({optimizationLevel: 5}),
            imagemin.svgo({
                plugins: [
                    {removeViewBox: true},
                    {cleanupIDs: false}
                ]
            })
        ]))
        .pipe(gulp.dest(imgDist))
        .pipe(reload({ stream:true }));
});
gulp.task('sprite', function () {  //產出精靈圖

   /*  //img,css產出的路徑相同時
   var spriteData = gulp.src(spriteSrc).pipe(cleanDest(spriteDist)).pipe(spritesmith({
        imgName: 'sprite.png',
        cssName: 'sprite.css'
    }));
    return spriteData.pipe(gulp.dest(spriteDist));*/
    var spriteData = gulp.src(spriteSrc)
        .pipe(cleanDest(spriteDist))
        .pipe(spritesmith({
        imgName: 'sprite.png',
        cssName: 'sprite.css'
    }));

    //設定打包的圖片路徑
    var imgStream = spriteData.img
        .pipe(buffer())
        .pipe(imagemin())
        .pipe(gulp.dest(spriteDist));
    //設定打包的css路徑
    var cssStream = spriteData.css
        .pipe(gulp.dest('src/css/sprite'));

    return merge(imgStream, cssStream);
});

gulp.task('ifont', function () {  //拷貝圖示字型
    return gulp.src(iconfontSrc)
        .pipe(changed(iconfontDist))
        .pipe(cleanDest(iconfontDist))//先清空後生成
        .pipe(gulp.dest(iconfontDist))
        .pipe(reload({ stream:true }));
});
gulp.task('static', function () {  //拷貝靜態資源,如json資料
    return gulp.src(staticSrc)
        .pipe(changed(staticDist))
        .pipe(cleanDest(staticDist))//先清空後生成
        .pipe(gulp.dest(staticDist))
        .pipe(reload({ stream:true }));
});

//清除dist目錄
gulp.task('clean', function () {
    return gulp.src('dist', {read: false})
        .pipe(clean());
});

//初始化時,批量執行多個操作
gulp.task('build', ['html','sass', 'css','js','sprite','img','ifont','static']);

//開啟本地伺服器監視檔案改動
gulp.task('serve', function() {
    browserSync({
        open:false,
        server: {
            baseDir: 'dist',
            index : "/pages/index.html"  //將dist目錄下的index.html作為入口頁面訪問
        }
    });
});

//啟動專案,命令:gulp start ,
// 瀏覽器訪問地址:http://localhost:3000/pages/index.html
gulp.task('start',['clean'], function() {
    gulp.start(['build','serve']);
    gulp.watch(pageSrc, ['html']);
    gulp.watch(sassSrc, ['sass']);
    gulp.watch(cssSrc, ['css']);
    gulp.watch(jsSrc, ['js']);
    gulp.watch('src/images/*.png', ['sprite']);
    gulp.watch(imgSrc, ['img']);
    gulp.watch(iconfontSrc, ['ifont']);
    gulp.watch(staticSrc, ['static']);
});


gulp.task('tojsp', function() {  //新增jsp檔案
    return gulp.src('dist/pages/**/*.html')
           .pipe(rename({ extname: '.jsp' }))
           .pipe(gulp.dest('dist/views/'))
});


說明:使用 
BrowserSync
 和 gulp,你可以輕鬆地建立一個開發伺服器,然後同一個 WiFi 中的任何裝置都可以方便地訪問到。BrowserSync 同時集成了 live-reload 所以不需要另外做配置了。開啟一個瀏覽器,訪問預設的 URL (http://localhost:3000)

當前案例的目錄結構為:(目錄粗略圖,詳細圖)

  

注:當你啟動專案後直接瀏覽器輸入http://localhost:3000時可能返回的頁面資訊是:Get Error,排除了專案配置錯誤及程式碼書寫錯誤後,該錯誤可能是你的訪問地址沒有進入到指定頁面,倘若你的專案目錄結構比較複雜,主頁面不是直接暴露在外面,此時你需要在地址後面補充訪問的頁面路徑,例如我這邊的訪問時:

http://localhost:3000/pages/home/home.html

相關推薦

Gulp打包構建專案

打包壓縮js,css,支援sass編譯成css,圖片壓縮,圖片組建成精靈圖,靜態檔案拷貝,實時監聽變化自動重新整理瀏覽器 //引入相關外掛 var gulp = require('gulp'); var rename = require('gulp-rename'); /

gulp打包釋出專案

在釋出之前還可以做程式碼優化: 1.壓縮 2.合併 3.增加版本號 首先,手動打包釋出的網站比如:https://javascript-minifier.com 顯然,手動打包麻煩費時費力的,那自從node.js出來以後,方便快捷,自動化處理。 打包

grunt構建專案打包上傳

全域性安裝grunt: npm install -g grunt-cli 生成package.json檔案: npm init 安裝grunt和所需要的外掛: npm install grunt –save-dev npm install –save-dev grunt-cont

[django]專案打包構建

這是專案的檔案結構。 官方文件的教程 setuptools模組 setuptools應該是對標準庫中的setup模組進行了封裝,看起來更好用一些。 打包過程 前提 安裝setuptools模組,一

使用maven構建專案時,SSM和springboot專案打包與雲伺服器部署

下面講講如何打包SSM和springboot專案,並部署到雲伺服器上。   由於使用的IDE不同,有的使用eclipse,有的使用idea,所以如果在IDE中按照 maven clean 再 maven install的方式打包會稍有不同,下面介紹一種通用的方式,不論SS

vue-cli構建專案npm run build打包後怎麼在本地檢視效果

這時如果直接執行npn run build是可以執行並打包你的程式碼的,不會報任何異常或錯誤,但是會看到打包完成有這樣一句提示: 打開了控制檯,看到console tab下一片404的各種找不到資源   解決方案 開啟專案資料夾。找到config資料夾裡的index.

gulp構建專案(三):gulp-watch監聽檔案改變、新增、刪除

一、gulp.watch()功能介紹 舉例說明:當’./src/*.html’發生變化時,執行’html’任務,同時重新整理瀏覽器。如下: gulp.task('watch', function(){ gulp.watch('./src/*.

gulp構建專案(一):環境準備

一、建立package.json檔案 npm init // 一路回車就行(預設已安裝node) package.json內容如下: { "name": "gulp-project", "version": "1.0.0", "des

gulp構建專案(二):啟本地服務

一、安裝browser-sync模組 npm i -D browser-sync 二、引入browser-sync模組,並初始化 var browserSync = require('browser-sync').create(); gulp.t

gulp構建專案(十三):babel-polyfill編譯es6新增api

需求分析: es6語法以及提供的強大api給前端帶來了很大便利,可是部分瀏覽器無法識別es6語法 gulp-babel只能將es6語法編譯成es5,比如:箭頭函式、let變數等,但是API不能編譯,比如Object.assign 引用babel-p

vue-cli構建專案 npm run build打包後怎麼在本地檢視效果

本文以vue官方腳手架vue-cli構建的專案為例。 執行npm run dev以開發模式開啟除錯好了你的案例程式;你還不滿足於僅僅把程式碼放在github上,想把專案打包,然後在本地預覽或者放在個人部落格上供大家直接看效果學習。 這時如果直接執

gulp打包普通html專案

說明:支援配置config輸入目錄 以及輸出目錄 支援hash css js image(有動態更換本地圖片路徑時不建議使用hash) 支援合併css js 目前暫不支援合併後js路徑自動替換 支援自動替換html 引用檔案路徑 ...*min.* 不參與壓縮&

gulp自動化構建工作流——專案例項

gulp自動化構建工作流——專案常用配置 寫在最前 在專案中,除了使用Mvvm框架開發一個完整的app外,往往還有在原生app內部嵌入多個靈散H5頁面的需求。 在MVVM框架中

Jenkins+git+maven 打包構建部署

jenkins本文出自 “清風柳絮” 博客,請務必保留此出處http://binuu.blog.51cto.com/801317/1944493Jenkins+git+maven 打包構建部署

gulp自動化構建工具使用總結

名稱 測試 構建工具 3.2 str 鏡像 運行 sta cnp 簡介: gulp是前端開發過程中對代碼進行構建的工具,是自動化項目的構建利器;她不僅能對網站資源進行優化,而且在開發過程中很多重復的任務能夠使用正確的工具自動完成;使用她,我們不僅可以很愉快的編寫代碼,而且

spring could Windows打包構建docker鏡像到linux

win usr 版本 環境 ddr pre mave 重啟 default 一、工程結構 二、Pom配置 <build> <plugins> <plugin>

Webpack打包構建太慢了?試試幾個方法

hash vid put es5 階段 ade new contex 版本 Webpack是個很流行的打包工具,但其打包速度卻一直被吐槽著 如果不用上一些打包的優化建議,單單打包兩三個文件就能花上好幾秒,放上幾十個入口文件依賴幾百上千個包的話,幾分鐘十幾分鐘妥妥的

vue-cli打包構建時常見的報錯解決方案

imu cli blog error: 背景 服務 strong 背景圖 log 報錯1:打包後丟到服務器中,打開是空白頁 報錯2:打包後想要在本地file中打開,但是打開是空白頁 報錯3:打包後在瀏覽器中打開,報錯ERROR in xxx.js from UglifyJs

做一個合格的前端,gulp自動化構建工具入門教程

安裝完成 基本 合成 node.js 文件替換 mage 9.png basename 加載 我的新作觀點網http://www.guandn.com (觀點網是一個獵獲新奇、收獲知識、重在獨立思考的網站),它前端js、css的壓縮、合並、md5命名等就使用了gulp自動化

gulp自動化構建工具使用

min() 方法 json 圖片 打印 efault under ... 執行 gulpfile.js: var gulp = require("gulp"); var imagemin = require("gulp-imagemin");//壓縮圖片插件 var ug