快速開發Grunt外掛----壓縮js模板
前言
Grunt是一款前端構建工具,幫助我們自動化搭建前端工程。它可以實現自動對js、css、html檔案的合併、壓縮等一些列操作。Grunt有很多外掛,每一款外掛實現某個功能,你可以通過npm命名去下載外掛,然後使用它們。關於grunt的使用以及配置,滷煮不打算在此介紹。本篇博文重點要講的是如何快速開發一款自定義的grunt外掛。因為滷煮在打包合併程式碼的時候發現了無法將html和js混合的檔案進行壓縮處理,為此滷煮也翻了很多資料,沒查詢到理想的解決方案。在山窮水復之時,硬著頭皮自己開發了一個簡單的外掛。在這裡分享出來給諸位,望對正在使用grunt構建工具的諸君能有所幫助。
建立外掛
1通過 npm install -g grunt-init
2通過 git clone git://github.com/gruntjs/grunt-init-gruntplugin.git ~/.grunt-init/gruntplugin
命令安裝grunt外掛模版。
3在一個空的目錄中執行 grunt-init gruntplugin
。
4執行 npm install
命令以準備開發環境。
在執行到第三步的時候會出現若干選擇讓你填寫,這些選項都是初始化外掛時的配置選項。把你的外掛名稱和github替換本地地址填上外其他的都可以選擇預設。然後我們得到了一個預設的外掛模組工程目錄。如下所示:
其中Gruntfile.js是當前模組需要的依賴,你需要的是在tasks中的js檔案中編寫自己的外掛。
編寫外掛
一個外掛是可以配置的,在開發外掛之前,你需要了解一些執行引數和配置。假設你的外掛放入到了工程中去了,那麼在該工程的gruntfile檔案中必須寫上要載入的外掛並且給他引數,告訴這個外掛怎麼樣處理哪些檔案。此處仍然以壓縮js和html混合程式碼的html檔案為例子,展示我們編寫外掛時的基礎配置:
module.exports = function(grunt) { // 構建任務配置 grunt.initConfig({ //讀取package.json的內容,形成個json資料 pkg: grunt.file.readJSON('package.json'), //壓縮模板檔案 htmlmin: { options: { a:1, b:2, c:3 }, html: { expand: true, cwd: 'js/tpl/', src: ['*.html'], dest: 'js/html_min/' } } }); // 載入指定外掛任務 grunt.loadNpmTasks('grunt-htmlmin'); // 預設執行的任務 grunt.registerTask('default', ['htmlmin']); };
我們可以看到在配置檔案中有了若干的配置項,那麼我們在自己開發的htmlmin外掛中怎麼樣讀取呢。對於options我們可以在自己的外掛中用this.options獲取到,其他html物件中的配置是直接作為檔案的預設屬性而引用的。
/* * template-uglify * https://github.com/燒炭黨人-申包胥/grunt-plugin * * Copyright (c) 2016 chen.y * Licensed under the MIT license. */ 'use strict'; module.exports = function(grunt) { // Please see the Grunt documentation for more information regarding task // creation: http://gruntjs.com/creating-tasks //開始註冊任務 grunt.registerMultiTask('htmlmin', 'uglify these html template', function() { // Merge task-specific and/or target-specific options with these defaults.此處即為options中的引數預設配置項,上面的a b c都會傳入其中 var options = this.options({ punctuation: '', separator: ', ' }); // Iterate over all specified file groups. this.files.forEach(function(f) { // Concat specified files. var src = f.src.filter(function(filepath) { // Warn on and remove invalid source files (if nonull was set). if (!grunt.file.exists(filepath)) { grunt.log.warn('Source file "' + filepath + '" not found.'); return false; } else { return true; } }).map(function(filepath) { // Read file source. return grunt.file.read(filepath); }).join(grunt.util.normalizelf(options.separator)); // Handle options.src未檔案內容的字串 src += options.punctuation; //此處為新增的業務,將讀取到的檔案內容壓縮 src = src.replace(/\r\n/g, '').replace(/\s+/g, ' ').replace(/>\s+(?=<)/g, '$1'); // 將處理後的檔案存入目標位置 dest是上文中配置的路徑/js/html_min/ grunt.file.write(f.dest, src); // Print a success message. grunt.log.writeln('File "' + f.dest + '" created.'); }); }); };
釋出外掛
現在,你的基本的外掛以及完成。通過本地測試後你可以執行 npm publish
命令將你建立的 Grunt 外掛提釋出npm!為了檢驗外掛,我們將一個html為字尾名的html檔案進行壓縮:
<!--消費訂單--> <script id="tplmenu" type="text/template"> <footer class="bottom"> <%for(var i=0; i<globalConfig.menu.length; i++){%> <div class="box <%if(globalConfig.menu[i].sub_button.length > 0){%>haschild<%}%>" data-url="<%=globalConfig.menu[i].url%>"> <div><%=globalConfig.menu[i].name%></div> <%if(globalConfig.menu[i].sub_button.length > 0){%> <ul class="hidelist"> <%for(var n=0; n<globalConfig.menu[i].sub_button.length; n++){%> <a href="<%=globalConfig.menu[i].sub_button[n].url%>"><%=globalConfig.menu[i].sub_button[n].name%></a> <%}%> </ul> <%}%> </div> <%}%> </footer> </script>
配置gruntfile檔案cwd:'source',src:['*.html'], dest:'target',執行grunt命令,得到壓縮後的html:
<!--消費訂單--><script id="tplmenu" type="text/template"><footer class="bottom"><%for(var i=0; i<globalConfig.menu.length; i++){%><div class="box <%if(globalConfig.menu[i].sub_button.length > 0){%>haschild<%}%>" data-url="<%=globalConfig.menu[i].url%>"><div><%=globalConfig.menu[i].name%></div><%if(globalConfig.menu[i].sub_button.length > 0){%><ul class="hidelist"><%for(var n=0; n<globalConfig.menu[i].sub_button.length; n++){%><a href="<%=globalConfig.menu[i].sub_button[n].url%>"><%=globalConfig.menu[i].sub_button[n].name%></a><%}%></ul><%}%></div><%}%></footer></script>
參考文件
相關推薦
快速開發Grunt外掛----壓縮js模板
前言 Grunt是一款前端構建工具,幫助我們自動化搭建前端工程。它可以實現自動對js、css、html檔案的合併、壓縮等一些列操作。Grunt有很多外掛,每一款外掛實現某個功能,你可以通過npm命名去下載外掛,然後使用它們。關於grunt的使用以及配置,滷煮不打算在此介紹。本篇博文重點要講的是如何快速開發一
【微信小程式開發】快速開發一個動態橫向導航模板並使用
目標:做個橫向導航,可以橫向滾動。 思路:使用scroll-view元件,可實現橫向滾動功能。scroll-view內包含一個動態的view列表,代表導航的每一項,導航要接收動態陣列,然後使用列表展示。使用模板技術做到可複用。 按照思路,先要做個template。 新建一個wxml檔案:navbar.w
在使用grunt進行壓縮js時候,如何處理檔案里名稱面有多個點號?
請注意,這個可能是grunt的bug,不過可以自己直接用rename來自定義js檔案的名稱。 (ext不能出現,因為ext優先順序高於rename,然後傳進去的src是已經處理好用ext處理好的名稱,只會有一個點號的。) 例如: 我們要壓縮p.fortest.js:
grunt 合並壓縮js和css文件(二)
1.0 ajax depend cnp com .html post tle runt 具體node及文件配置請看: grunt 安裝使用(一) 要壓縮的文件 --src/ ajax.js assets.js touch.js zepto.js
【第一天】django快速開發——環境部署、表單、數據庫操作、模板、文件學習
django 開發 自動化運維 系統技術 web開發 安裝django1、安裝 setuptoolsyum install python-setuptools2、完成之後,就可以使用 easy_install 命令安裝 djangoeasy_install django註意:django對
JEPLUS前段JS——軟件快速開發平臺
alert font 方法 進行 輸入 proc tom 今天 ado 前端js今天我們對前端js進行簡單的了解,在我們的系統開發中也會經常用到。一、簡單的彈出提示框alert(msg,type,title);前端的話采用了EXTJS4 測試效果二、信息通知框 我們可以
快速利用 vue 或者 react 開發 chrome 外掛
原文連結:github.com/lzwaiwai/bl… 最近寫了一個可以利用 vue 或者 react 快速開發 chrome 外掛的 boilerplate,只需要使用我之前寫的 bigroom-cli 工具,就可快速簡單地進行啟動、打包、編譯等,同時也支援儲存程式碼後,外掛自動更新,頁面自動重新整理。
AJAX template-web.js (模板引擎) jquery.twbsPagination.js (分頁外掛) 的使用
模板引擎 分頁外掛 1.概念 模板引擎不屬於特定技術領域,它是跨領域跨平臺的概念。在Asp下有模板引擎,在PHP下也有模板引擎,在C#下也有,甚至JavaScript、WinForm開發都會用到模板引擎技術。 2.原理 置換型模板引擎實現簡單,但其效率低下,
用 Node.js 快速開發出多功能的多人線上的文章分享平臺
最近在學習使用 Node.js 框架,邊學習邊使用,花了大概 3周 時間做完這個 Web應用 且在 12月16 凌晨左右上線成功(其實就是把開發環境搬到伺服器), 地址: a.lishaoy.net 這個 Web應用 的程式碼是開源的,如對這個應用感興趣,想知道程式碼是如何執行的,可以去我 GitHub 下
使用Safe.js進行快速開發搜尋引擎頁面實踐
這篇文章將會講解如何使用safe.js快速開發一個web應用程式。前言:在這篇文章裡面,我就簡單製作一個類似於搜尋引擎的頁面開始:首先我們先建立一個Demo.html的檔案,裡面寫上基本結構,並用script標籤引入safe.js的檔案:(Safe.js Gitee連結:ht
吉特倉儲管系統(開源)--使用Grunt壓縮JS檔案
在吉特倉儲管理系統開發的過程中大量使用到了JS,隨著JS檔案的增多我們需要對JS進行有效的管理,同時也要對JS檔案進行一些壓縮。文字用於記錄一下使用grunt壓縮JS的操作步驟,便於遺忘之後記錄查詢,文章內容非常淺顯。 一. 什麼是grunt JavaScript世界的構建工具,官
用Node.js快速開發RESTful API
前面講了 用Node.js開發靜態網頁服務,這一篇講用Node.js開發RESTful API服務,同樣是基於 express 框架。 Node 返回 json 比如開發一個使用者資訊介面,通過get方法返回使用者資訊: var express = r
js模板引擎artTemplate快速上手
騰訊的artTemplate 1,編寫模板 (採用script標籤並帶有屬性id和type="text/html") <script id="test" type="text/html"&
如何用Cocos2d-JS快速開發一個微信遊戲《來自喵星的你》
今天我們來介紹一下如何使用Cocos2d-JS引擎快速開發一個微信遊戲《來自喵星的你》 1.Cocos2d-JS引擎 Cocos2d-JS引擎是Cocos2d-x的JS版本,它極大簡化與整合的API設計使得遊戲開發變得前所未有地輕鬆。依託Web平臺使C
grunt壓縮js和css檔案(1)
接下來是個人的理解: 壓縮js 1、node安裝,node會自動安裝npm。 安裝完之後檢視版本:node -v 和 npm -v 2、新建專案後package.json 安裝。 命令:npm init(直接一直回車,輸入yes之後回車
利用Node.js進行移動物聯網的嵌入式進行快速開發
嵌入式開發C/C++和安卓原生使用的java屬於一個週期長和研發成本較高的工作,但是隨著技術的發展,某些前端語言技術在大行其道,所以使用js進行一些簡單的對CPU負載要求低的工作可以使用,這樣前端的人
jsp 快速開發報表 chart.js 餅圖示例 系列教材(一)
畫餅圖,需要有兩個js,一個是chart.js一個是jquery.min.js,我這兩個都放在了webContent下了引入方法: <script type="text/javasc
Spring外掛安裝,及快速開發Spring Web mavan 專案
工欲善其事,必先利其器。 Spring外掛的下載及安裝 2.安裝教程; ①、Help-->Install New Softwar
學習Discuz! X3.2記錄:快速回復外掛,通過js使選擇的下拉列表填充到回帖內容中
修改前一篇內容,把 quick_reply.class.php 檔案內容修改為: <?php if(!defined('IN_DISCUZ')) { exit('Access
KoaHub.js是基於 Koa.js 平臺的 Node.js web 快速開發框架
koahubjs KoaHub.js -- 基於 Koa.js 平臺的 Node.js web 快速開發框架。可以直接在專案裡使用 ES6/7(Generator Function, Class, Async & Await)等特性,藉助 Babel 編譯,可穩