使用 gulp 壓縮 JS
請務必理解如下章節後閱讀此章節:
壓縮 js 程式碼可降低 js 檔案大小,提高頁面開啟速度。在不利用 gulp 時我們需要通過各種工具手動完成壓縮工作。
所有的 gulp 程式碼編寫都可以看做是將規律轉化為程式碼的過程。
規律
找到 js/
目錄下的所有 js 檔案,壓縮它們,將壓縮後的檔案存放在 dist/js/
目錄下。
gulp 程式碼
建議:你可以只閱讀下面的程式碼與註釋或同時閱讀程式碼解釋
gulp 的所有配置程式碼都寫在 gulpfile.js
檔案。
一、新建一個 gulpfile.js
檔案
chapter2 └── gulpfile.js
二、在 gulpfile.js
中編寫程式碼
// 獲取 gulp var gulp = require('gulp')
require()
是 node (CommonJS)中獲取模組的語法。在 gulp 中你只需要理解
require()
可以獲取模組。
三、獲取 gulp-uglify
元件
// 獲取 uglify 模組(用於壓縮 JS) var uglify = require('gulp-uglify')
四、建立壓縮任務
// 壓縮 js 檔案 // 在命令列使用 gulp script 啟動此任務 gulp.task('script', function() { // 1. 找到檔案 gulp.src('js/*.js') // 2. 壓縮檔案 .pipe(uglify()) // 3. 另存壓縮後的檔案 .pipe(gulp.dest('dist/js')) })
gulp.task(name, fn)
- 定義任務,第一個引數是任務名,第二個引數是任務內容。gulp.src(path)
- 選擇檔案,傳入引數是檔案路徑。gulp.dest(path)
- 輸出檔案gulp.pipe()
- 管道,你可以暫時將 pipe 理解為將操作加入執行佇列
參考:gulp API文件
五、跳轉至 gulpfile.js
所在目錄
開啟命令列使用 cd
命令跳轉至 gulpfile.js
檔案所在目錄。
例如我的 gulpfile.js
檔案儲存在 C:\gulp-book\demo\chapter2\gulpfile.js
。
那麼就需要在命令列輸入
cd C:\gulp-book\demo\chapter2
Mac 使用者可使用
cd Documents/gulp-book/demo/chapter2/
跳轉
六、使用命令列執行 script 任務
在控制檯輸入 gulp 任務名
可執行任務,此處我們輸入 gulp script
回車。
注意:輸入 gulp script
後命令列將會提示錯誤資訊
// 在命令列輸入 gulp script Error: Cannot find module 'gulp-uglify' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25)
Cannot find module 'gulp-uglify'
沒有找到 gulp-uglify
模組。
七、安裝 gulp-uglify
模組
因為我們並沒有安裝 gulp-uglify
模組到本地,所以找不到此模組。
使用 npm 安裝 gulp-uglify
到本地
npm install gulp-uglify
安裝成功後你會看到如下資訊:
gulp-uglify@1.1.0 node_modules/gulp-uglify ├── deepmerge@0.2.7 ├── uglify-js@2.4.16 (uglify-to-browserify@1.0.2, async@0.2.10, source-map@0.1.34, optimist@0.3.7) ├── vinyl-sourcemaps-apply@0.1.4 (source-map@0.1.43) ├── through2@0.6.3 (xtend@4.0.0, readable-stream@1.0.33) └── gulp-util@3.0.4 (array-differ@1.0.0, beeper@1.0.0, array-uniq@1.0.2, object-assign@2.0.0, lodash._reinterpolate@3.0.0, lodash._reescape@3.0.0, lodash._reevaluate@3.0.0, replace-ext@0.0.1, minimist@1.1.1, chalk@1.0.0, lodash.template@3.3.2, vinyl@0.4.6, multipipe@0.1.2, dateformat@1.0.11) chapter2 $
在你的資料夾中會新增一個 node_modules
資料夾,這裡面存放著 npm 安裝的模組。
目錄結構:
├── gulpfile.js └── node_modules └── gulp-uglify
接著輸入 gulp script
執行任務
gulp script [13:34:57] Using gulpfile ~/Documents/code/gulp-book/demo/chapter2/gulpfile.js [13:34:57] Starting 'script'... [13:34:57] Finished 'script' after 6.13 ms
八、編寫 js 檔案
我們發現 gulp 沒有進行任何壓縮操作。因為沒有js這個目錄,也沒有 js 目錄下的 .js
字尾檔案。
建立 a.js
檔案,並編寫如下內容
// a.js function demo (msg) { alert('--------\r\n' + msg + '\r\n--------') } demo('Hi')
目錄結構:
├── gulpfile.js ├── js │ └── a.js └── node_modules └── gulp-uglify
接著在命令列輸入 gulp script
執行任務
gulp 會在命令列當前目錄下建立 dist/js/
資料夾,並建立壓縮後的 a.js
檔案。
目錄結構:
├── gulpfile.js ├── js │ └── a.js ├── dist │ └── js │ └── a.js └── node_modules └── gulp-uglify
function demo(n){alert("--------\r\n"+n+"\r\n--------")}demo("Hi");
九、檢測程式碼修改自動執行任務
js/a.js
一旦有修改 就必須重新在命令列輸入 gulp script
,這很麻煩。
可以使用 gulp.watch(src, fn)
檢測指定目錄下檔案的修改後執行任務。
在 gulpfile.js
中編寫如下程式碼:
// 監聽檔案修改,當檔案被修改則執行 script 任務 gulp.watch('js/*.js', ['script']);
但是沒有命令可以執行 gulp.watch()
,需要將 gulp.watch()
包含在一個任務中。
// 在命令列使用 gulp auto 啟動此任務 gulp.task('auto', function () { // 監聽檔案修改,當檔案被修改則執行 script 任務 gulp.watch('js/*.js', ['script']) })
接在在命令列輸入 gulp auto
,自動監聽 js/*.js
檔案的修改後壓縮js。
$gulp auto [21:09:45] Using gulpfile ~/Documents/code/gulp-book/demo/chapter2/gulpfile.js [21:09:45] Starting 'auto'... [21:09:45] Finished 'auto' after 9.19 ms
此時修改 js/a.js
中的程式碼並儲存。命令列將會出現提示,表示檢測到檔案修改並壓縮檔案。
[21:11:01] Starting 'script'... [21:11:01] Finished 'script' after 2.85 ms
至此,我們完成了 gulp 壓縮 js 檔案的自動化程式碼編寫。
注意:使用 gulp.watch
後你的命令列會進入“執行”狀態,此時你不可以在命令列進行其他操作。可通過 Ctrl + C
停止 gulp。(Mac 中使用 control + C
)
Mac 下使用
control + C
停止 gulp
十、使用 gulp.task('default', fn) 定義預設任務
增加如下程式碼
gulp.task('default', ['script', 'auto']);
此時你可以在命令列直接輸入 gulp
+回車,執行 script
和 auto
任務。
最終程式碼如下:
// 獲取 gulp var gulp = require('gulp') // 獲取 uglify 模組(用於壓縮 JS) var uglify = require('gulp-uglify') // 壓縮 js 檔案 // 在命令列使用 gulp script 啟動此任務 gulp.task('script', function() { // 1. 找到檔案 gulp.src('js/*.js') // 2. 壓縮檔案 .pipe(uglify()) // 3. 另存壓縮後的檔案 .pipe(gulp.dest('dist/js')) }) // 在命令列使用 gulp auto 啟動此任務 gulp.task('auto', function () { // 監聽檔案修改,當檔案被修改則執行 script 任務 gulp.watch('js/*.js', ['script']) }) // 使用 gulp.task('default') 定義預設任務 // 在命令列使用 gulp 啟動 script 任務和 auto 任務 gulp.task('default', ['script', 'auto'])
去除註釋後,你會發現只需要 11 行程式碼就可以讓 gulp 自動監聽 js 檔案的修改後壓縮程式碼。但是還有還有一些效能問題和缺少容錯性,將在後面的章節詳細說明。
你可以訪問 gulp-uglify 以檢視更多用法。
相關文章
- gulp壓縮檔案
- Gulp壓縮報錯處理
- gulp外掛(3) - gulp-htmlmin(壓縮HTML檔案)HTML
- 如何gulp壓縮,醜化程式碼
- gulp-imagemin版本9圖片壓縮
- JS壓縮方法及批量壓縮JS
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- 使用jsmin壓縮javascript指令碼JSJavaScript指令碼
- gulp壓縮html,css,js檔案流程、監聽任務、使用gulp建立伺服器、同時執行多個任務、反向代理HTMLCSSJS伺服器
- phpstorm 壓縮 JSPHPORMJS
- JSONB壓縮版本ZSONJSON
- 如何利用 gulp 壓縮混淆 “上古”時期的專案檔案
- linux 高效壓縮工具之xz的壓縮解壓使用Linux
- 使用deflate壓縮CookieCookie
- Java使用Zip壓縮Java
- js上傳圖片壓縮JS
- js圖片壓縮推薦JS
- js和css線上壓縮工具JSCSS
- PHP動態壓縮js,cssPHPJSCSS
- JAVA壓縮和解壓縮Java
- zip壓縮和解壓縮
- gulp之自動化靜態資源壓縮合並加版本號
- 使用gzip壓縮檔案
- 簡單好用的js 壓縮工具JS
- js 壓縮圖片 H5JSH5
- Swoole WebSoctet 使用 zlib 壓縮之 PHP 與 pako.jsWebPHPJS
- ASP.NET MVC 4使用Bundle的打包壓縮JS/CSSASP.NETMVCJSCSS
- 使用yuicompressor-maven-plugin壓縮js及css檔案UIMavenPluginJSCSS
- linux壓縮解壓縮Linux
- 字串的壓縮和解壓縮字串
- 檔案壓縮和解壓縮
- aix 下壓縮與解壓縮AI
- linux壓縮和解壓縮命令Linux
- tar 分卷壓縮&解壓縮命令
- AIX 上壓縮與解壓縮AI
- JS—圖片壓縮上傳(單張)JS
- flask-compress 和JSON壓縮FlaskJSON
- 使用compress壓縮檔案