1. 程式人生 > >快速開發Grunt外掛----壓縮js模板

快速開發Grunt外掛----壓縮js模板

前言

Grunt是一款前端構建工具,幫助我們自動化搭建前端工程。它可以實現自動對js、css、html檔案的合併、壓縮等一些列操作。Grunt有很多外掛,每一款外掛實現某個功能,你可以通過npm命名去下載外掛,然後使用它們。關於grunt的使用以及配置,滷煮不打算在此介紹。本篇博文重點要講的是如何快速開發一款自定義的grunt外掛。因為滷煮在打包合併程式碼的時候發現了無法將html和js混合的檔案進行壓縮處理,為此滷煮也翻了很多資料,沒查詢到理想的解決方案。在山窮水復之時,硬著頭皮自己開發了一個簡單的外掛。在這裡分享出來給諸位,望對正在使用grunt構建工具的諸君能有所幫助。

建立外掛

1通過 npm install -g grunt-init

 命令安裝 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 編譯,可穩