gulp使用詳情 及 3.0到4.0的坑

来源:https://www.cnblogs.com/xuxiaoyu/archive/2019/07/08/11152980.html
-Advertisement-
Play Games

項目的所有依賴都可以安裝,每個都有詳細的註釋。 //gulp.series|4.0 依賴順序執行//gulp.parallel|4.0 多個依賴嵌套'html','css','js'並行 下麵1和2分別運行 1.自動監測文件變化並刷新瀏覽器 //初始生成app/dist目錄 gulp.task('i ...


項目的所有依賴都可以安裝,每個都有詳細的註釋。

const gulp = require('gulp');
const sass = require('gulp-sass');
const browserSync = require("browser-sync").create(), //自動刷新
reload = browserSync.reload;
const filter = require('gulp-filter');
// gulp-filter 包, 以確保只有 *.css 文件響應 .reload - 這樣一來,
// 您還是會得到CSS註入,而不是整個頁面重載。
const useref = require('gulp-useref'); //合併JS
const uglify = require('gulp-uglify'); //js壓縮
const minifyCSS = require('gulp-minify-css'); //壓縮css

var gulpIf = require('gulp-if');

var del = require('del');

var runSequence = require('run-sequence');//組織任務執行順序,未使用

var rename = require('gulp-rename');//重命名

var watch=require('gulp-watch');//監視

var minifyHtml = require("gulp-minify-html");//壓縮html

var babel = require("gulp-babel");
// npm install --save-dev gulp-babel@7 babel-core babel-preset-env

var jshint = require("gulp-jshint");//js檢查
var imagemin = require('gulp-imagemin');//壓縮圖片文件
var pngquant = require('imagemin-pngquant'); //png圖片壓縮插件
var connect=require('gulp-connect');//引入gulp-connect模塊 瀏覽器刷新
var cache = require('gulp-cache');//壓縮圖片可能會占用較長時間,使用 gulp-cache 插件可以減少重覆壓縮。
var RevAll = require("gulp-rev-all");//md5尾碼

 

gulp.task('html',function(){//編譯html
return gulp.src('app/*.html')
.pipe(gulp.dest('app/dist'))
.pipe(connect.reload());
})

 

gulp.task('css',function(){//編譯scss
return gulp.src('app/scss/**/*.scss')
.pipe(sass())//編譯scss
// .pipe(gulp.dest('app/css')) //當前對應css文件
.pipe(gulp.dest('app/dist/css')) //當前對應css文件
.pipe(connect.reload());//更新
})

 

gulp.task('js',function(){//編譯ES6並且壓縮
return gulp.src('app/js/**/*.js')
.pipe(jshint())//檢查代碼
.pipe(babel({//編譯ES6
presets: ['es2015']
}))
.pipe(uglify())//壓縮js
.pipe(gulp.dest('app/dist/js'))
.pipe(connect.reload());
})

 

gulp.task('fonts', function() {
return gulp.src('app/fonts/**/*')
.pipe(gulp.dest('app/dist/fonts'))
})

 

gulp.task('images', function() {
return gulp.src('app/images/**/*.+(png|jpg|jpeg|gif|svg)')
// Caching images that ran through imagemin
.pipe(cache(imagemin({//壓縮圖片文件
interlaced: true,
})))
.pipe(gulp.dest('dist/images'))
});

 

gulp.task('clean:app/dist', function() {//刪除之前生成的文件
return del(['app/dist']);
});

 

gulp.task('clean:dist', function() {//非同步清理除dist目錄圖片以外的文件
return del(['app/dist/**/*', '!dist/images', '!dist/images/**/*']);
});

 

gulp.task('minFs', function() {//壓縮文件
return gulp.src('app/dist/*.html')
.pipe(useref())//合併js
.pipe(
gulpIf('*.js',uglify())//壓縮js
)
.pipe(gulpIf('*.css', minifyCSS()))//壓縮css
.pipe(RevAll.revision({//不被重命名
dontRenameFile:[/^\/favicon.ico$/g, ".html"]
})) 
.pipe(gulp.dest('dist'));
});

 

gulp.task('connect:app',function(){
connect.server({
root:'app',//根目錄
// ip:'192.168.11.62',//預設localhost:8080
livereload:true,//自動更新
port:9998//
})
})

 

gulp.task('connect:dist',function(cb){
connect.server({
root:'app',//根目錄
// ip:'192.168.11.62',//預設localhost:8080
livereload:true,//自動更新
port:9999//
})
cb()//執行回調,表示這個非同步任務已經完成,起通作用,這樣會執行下個任務
})

 

gulp.task('watchs',function(){//監聽變化執行任務
//當匹配任務變化才執行相應任務
gulp.watch('app/*.html',gulp.series('html'));
gulp.watch('app/scss/**/*.scss',gulp.series('css'));
gulp.watch('app/js/**/*.js',gulp.series('js'));
gulp.watch('app/fonts/**/*',gulp.series('fonts'));
gulp.watch('app/images/**/*',gulp.series('images'));
})

 

//gulp.series|4.0 依賴順序執行
//gulp.parallel|4.0 多個依賴嵌套'html','css','js'並行

下麵1和2分別運行

1.自動監測文件變化並刷新瀏覽器

//初始生成app/dist目錄

gulp.task('init',gulp.series('clean:app/dist',gulp.parallel('html','css','js','fonts','images')));

//啟動任務connect:app服務,並監控變化

gulp.task('run',gulp.series('init','connect:app','watchs'));

2.生成打包文件

gulp.task('build',gulp.series('clean:dist',gulp.parallel('init'),'minFs'));

//啟動任務connect:dist服務,生成打包文件後,監控其變化

gulp.task('serve',gulp.series('connect:dist','build','clean:app/dist','watchs'));

 

3.0到4.0的坑

AssertionError [ERR_ASSERTION]: Task never defined: getLanguageObj

任務一定需要先創建後使用,先後順序需要調換。

使用gulp-each為什麼只編譯一個文件

// 對每一個JS文件進行處理
stream = stream.pipe(each(function(content, file, callback) {
// 獲得JS文件全路徑
var path = file.history[0];
// 處理單個文件
dealPath(path );
callback(null,null);
}));

原有的編譯不需要執行callback也可以執行,gulp-each升級後一定需要加上callback方法

gulp src設置base,修改存放路徑

gulp.src('websrc/**/*.js',{base:'websrc'}).pipe(gulp.dest('zh'));

這樣會將源目錄下的websrc這層目錄去掉,比如源目錄"websrc/pages/common/index.js"會存放到目標目錄下"zh/pages/common/index.js"

gulp watch方法的變動

// gulp3.0
gulp.watch(['websrc/**/*.html'], function(event) {
event.type = 'added'//或者changed、deleted
//event.path 是文件的絕對路徑
}

// gulp4.0
gulp.watch(['websrc/**/*.html'].on('all', function(event, path, stats) {
event= 'add'//或者change、unlink
//path 是文件的相對路徑
})

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前段時間看C#本質論,發現內容有點抽象,不適合入門,現在換了一本適合入門的書籍: C#圖解教程。 分割線 1、文章均為個人原創,歡迎轉載,轉載請保留出處:https://www.cnblogs.com/volcanol/ 2、獲取工控PLC、變頻器、HMI、電腦、Windows、Linux、嵌入式 ...
  • Keras.NET是一個高級神經網路API,它使用C#編寫,並帶有Python綁定,可以在Tensorflow、CNTK或Theano上運行。其關註點是實現快速實驗。因為做好研究的關鍵是:能在儘可能短的時間內從一個想法發展出結果。 如果你需要一個能實現以下需求的深度學習庫,那麼請使用Keras: 允 ...
  • .NET開發框架(四)-伺服器配置完整篇,包括伺服器IIS安裝、網路負載均衡器安裝、ASP.NET Core 安裝 ...
  • 後端的規範與思想 [toc] 分層 Web層 (接收和發送HTTP請求的,封裝;別名controller層) 業務邏輯層 (別名服務層,文件常以xxxService為名) DAO層 (Date Access Object,數據訪問對象,對對象進行操作,存儲是對象轉為數據,讀取是數據轉為對象) 持久層 ...
  • 該指令會跳過所在元素和它的子元素的編譯過程,也就是把這個節點及其子節點當作一個靜態節點來處理,例如: 編譯後的結果為: 對應的HTML節點樹為: 可以看到:title屬性也被當成了特性來處理了,我們在控制台輸入app.message="Hello Vue!"看看渲染變化: 可以看到對於v-pre對應 ...
  • 經過 "canvas 教程(一) 簡介" 我們知道了 canvas 的一些基本情況 而本次是給大家帶來直線的繪製 canvas 中,基本圖形有兩種,一種是直線,還有一種是曲線 但是無論是直線還是曲線,我們都應該先瞭解 canvas 的坐標系 s canvas 的坐標系 要繪製之前肯定要瞭解一下 ca ...
  • 記錄百裡半 今天回顧html,總結一下今日所學內容。 正文 目的:通過一些基礎的標簽製作關於LOL的靜態網頁 所用代碼: 1.div中套div的話,若定義了第一個盒子的大小,被它包含的盒子就預設為同樣的形式; 2.圖片標簽img,用法:<img src:..> 3.url目錄:同一資源定位器,尋找資 ...
  • 3d建築,3d消防,消防演習模擬,3d庫房,3d檔案室,3d密集架,webGL,threejs,3d機房,bim管理系統 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...