日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

grunt对象之api

發布時間:2023/10/11 综合教程 85 老码农
生活随笔 收集整理的這篇文章主要介紹了 grunt对象之api 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  grunt已經扯了七篇了,殊為不易。最后一篇扯點早應該提及的東西,就是module.exports = function(grunt) {}傳入的這個grunt。之前的代碼grunt一般只出現在Gruntfile.js這幾個地方。

require('load-grunt-tasks')(grunt);
require('time-grunt')(grunt);
grunt.initConfig({
...
});
grunt.registerTask('default', [...]);

  但grunt的內容遠遠不止這些,它包含9個對象屬性,而上面的initConfig、registerTask不過是某些屬性對象的方法,是為了方便用戶調用所取的別名而已。

  9個對象將分別進行介紹。

  1. config
    grunt.config.init(obj): grunt.initConfig()的元神,不必多說了吧。
    grunt.config(prop[, value]): 可以叫語法糖么,當參數為一個的時候調用grunt.config.get()。當參數為兩個的時候調用grunt.config.set()。
    grunt.config.get/set(prop[, value]): 設置或者獲取prop
    grunt.config.getRaw(prop): 獲取prop的原始code
    grunt.config.process(templateString): 返回<%=var.prop%>這種模板對應的值。一般來說,設置的prop當value為string時(比如src,dest)可以直接使用模板,但是當value為function時,想要通過模板獲取字符串就需要用到這個方法了。
    舉個栗子,自己感受吧。

    'use strict';
    
    module.exports = function(grunt) {
    
        require('load-grunt-tasks')(grunt);
    require('time-grunt')(grunt); var path = {
    src: 'src',
    dest: 'dest'
    } grunt.config.init({
    path: path,
    copy: {
    test: {
    files: [
    {
    expand: true,
    cwd: '<%=path.src%>/',
    src: '{,*/}*',
    dest: '<%=path.dest%>'
    }
    ]
    }
    }
    }); grunt.config('clean', {
    test: '<%=path.dest%>'
    }); console.log(grunt.config('path').dest); //output: dest
    console.log(grunt.config.process('<%=path.dest%>')); //output: dest
    console.log(grunt.config.get('clean').test); //output: dest
    console.log(grunt.config.getRaw('clean').test); //output: <%=path.dest%> grunt.registerTask('default', ['clean', 'copy']);
    }
  2. event
    grunt.event.on(type, listener): 設置某類型事件的監聽函數
    grunt.event.once(type, listener): 設置某類型事件的一次性監聽函數
    grunt.event.many(type, count, listener): 設置某類型事件的多次性監聽函數
    grunt.event.off(type, listener): 取消某類型事件的某個監聽函數
    grunt.event.removeAllListeners([type]): 取消某類型事件的全部監聽函數
    grunt.event.emit(type[, arg1[, arg2...]]): 發出某類型時間
    需要注意的是,grunt中沒有原生的event type,全部自己定義自己發出。
    這部分方法比較簡單,和jQuery的命名很相似,所以直接給出代碼和輸出過了吧。
    'use strict';
    
    module.exports = function(grunt) {
    
        function foron(count) {
    console.log('test for off ' + count);
    } grunt.event.on('test', foron);
    grunt.event.on('test', function(count) {
    console.log('test for on ' + count);
    }); grunt.event.once('test', function(count) {
    console.log('test for once ' + count);
    }); grunt.event.many('test', 2, function(count) {
    console.log('test for many ' + count);
    }); grunt.event.emit('test', 1);
    grunt.event.emit('test', 2);
    grunt.event.emit('test', 3);
    grunt.event.off('test', foron);
    grunt.event.emit('test', 4);
    grunt.event.removeAllListeners();
    grunt.event.emit('test', 5); grunt.registerTask('default', []);
    }

    輸出如下:

    test for off
    test for on
    test for once
    test for many
    test for off
    test for on
    test for many
    test for off
    test for on
    test for on
  3. fail
    grunt.fail.warn(msg[, errorcode]): grunt.warn()的本尊,顯示一條警告信息然后退出grunt的本次執行,執行grunt時使用--force參數無視警告信息繼續執行
    grunt.fail.fatal(msg[, errorcode]): grunt.fatal()的本尊,顯示一條錯誤信息然后退出grunt的本次執行
    Gruntfile.js中一般是用不到的,如果你編寫plugin就肯定用的到了。
  4. file 文件操作,封裝了nodejs中的fs模塊
    grunt.file.defaultEncoding: 文件編碼,默認是'utf8'
    grunt.file.preserveBOM: 是否在檔首保留BOM,默認false

    grunt.file.read(filepath[, options]): 讀取并返回文件內容,options.encoding為null時返回Buffer,其他返回String
    grunt.file.readJSON(filepath[, options]): 讀取并返回文件內容的JSON對象表示,常見var pack = grunt.file.readJSON('package.json');
    grunt.file.readYAML(filepath[, options]): 同上,我表示不懂YAML
    grunt.file.write(filepath, contents[, options]): 將contents寫入filepath,contents可以是String或Buffer

    grunt.file.copy(srcpath, destpath[, options]): 拷貝文件,會自動創建文件夾
    grunt.file.delete(filepath[, options]): 刪除文件

    grunt.file.mkdir(dirpath[, options]): 創建文件夾
    grunt.file.recurse(rootdir, callback): 遍歷文件夾下的所有文件(包括子文件夾下的),并執行callback(abspath, rootdir, subdir, filename)

    grunt.file.expand([options, ]patterns): 返回patterns匹配的所有路徑,比如我之前的項目結構grunt.file.expand('src/**')返回的如下

    [ 'src',
    'src/css',
    'src/css/base.css',
    'src/css/main.css',
    'src/image',
    'src/image/haiys02.jpg',
    'src/index.html',
    'src/js',
    'src/js/hellogrunt.js',
    'src/js/helloworld.js' ]

    grunt.file.expandMapping(patterns, dest[, options]): 返回patterns匹配路徑和原路徑的鍵值對,比如grunt.file.expandMapping('**', 'dest', {cwd: 'src'})返回

    [ { src: [ 'src' ], dest: 'dest' },
    { src: [ 'src/css' ], dest: 'dest/css' },
    { src: [ 'src/css/base.css' ], dest: 'dest/css/base.css' },
    { src: [ 'src/css/main.css' ], dest: 'dest/css/main.css' },
    { src: [ 'src/image' ], dest: 'dest/image' },
    { src: [ 'src/image/haiys02.jpg' ],
    dest: 'dest/image/haiys02.jpg' },
    { src: [ 'src/index.html' ], dest: 'dest/index.html' },
    { src: [ 'src/js' ], dest: 'dest/js' },
    { src: [ 'src/js/hellogrunt.js' ],
    dest: 'dest/js/hellogrunt.js' },
    { src: [ 'src/js/helloworld.js' ],
    dest: 'dest/js/helloworld.js' } ]

    grunt.file.match([options, ]patterns, filepaths): 返回filepaths中匹配patterns的路徑
    grunt.file.isMatch([options, ]patterns, filepaths): filepaths中一旦有path命中即返回true

    grunt.file.exists(path1[, path2...]): 返回paths是否存在
    grunt.file.isLink/Dir/File(path1[, path2...]): 返回paths是否為鏈接、文件夾、文件

    grunt.file.isPathAbsolute(path1[, path2...]): 返回paths是否為絕對路徑
    grunt.file.arePathsEquivalent(path1[, path2...]): 返回paths是否相同
    grunt.file.doesPathContain(dir, path1[, path2...]): 返回paths是否在dir中
    grunt.file.isPathCwd(path1[, path2...]): 返回paths是否為cwd
    grunt.file.isPathInCwd(path1[, path2...]): 返回paths是否在cwd中,cwd不在cwd中
    grunt.file.setBase(path1[, path2...]): 設置當前的cwd

  5. log/verbose
    grunt.log.write[ln](msg): 打印 msg
    grunt.log.error[lns](msg): 打印 紅色'>>' msg
    grunt.log.ok[lns](msg): 打印 綠色'>>' msg
    grunt.log.subhead(msg): 打印 高亮msg
    grunt.log.writeflags(obj, prefix): 打印 prefix: obj.toString()
    grunt.log.debug(msg): 當指定--debug時打印 [D] msg
  6. option
    grunt.option(key[, value]): 讀取或設置option grunt --key1=value1 --key2=value2
    grunt.option.init([obj]): 初始化option對象
    grunt.option.flags(): 將option對象以'key=value'字符串數組方式返回
  7. task
    grunt.task.registerTask(taskname, taskslist)/(taskname, desc, taskFunction): grunt.registerTask的真身,注冊可執行的任務
    grunt.task.registerMultiTask(taskname, desc, taskFunction): grunt.registerMultiTask的真身,注冊新的task類型,需指定target才能執行,function內部通過this.target獲取當前target,通過this.data獲取當前target的value
    'use strict';
    
    module.exports = function(grunt) {
    
        require('time-grunt')(grunt);
    
        grunt.initConfig({
    log: {
    foo: [1, 2, 3],
    bar: 'hello world',
    baz: {
    options: {
    bool: false
    }
    }
    }
    }); grunt.task.registerMultiTask('log', 'Log stuff.', function() {
    grunt.log.writeln(this.target + ': ' + this.data);
    }); grunt.registerTask('default', ['log']);
    }

    輸出如下:

    Running "log:foo" (log) task
    foo: 1,2,3 Running "log:bar" (log) task
    bar: hello world Running "log:baz" (log) task
    baz: [object Object]

    grunt.task.renameTask: 重命名task type,原task type將不可使用
    grunt.task.loadTasks: grunt.loadTasks的真身,指定需要加載的文件的目錄
    grunt.task.loadNpmTasks: grunt.loadNpmTasks的真身,指定需要加載的plugin
    以下語句效果相同

    grunt.loadTasks('node_modules/grunt-contrib-clean/tasks/');
    grunt.loadNpmTasks('grunt-contrib-clean');

    grunt.task.run(tasksList): 執行任務隊列
    grunt.task.clearQueue(): 清空任務隊列
    grunt.task.normalizeMultiTaskFiles(): 將target將要處理的文件以src-dest-orig對象數組的形式序列化,以config中Gruntfile.js為例,添加代碼

    console.log(grunt.task.normalizeMultiTaskFiles(grunt.config.process('<%=copy.test%>')));

    打印出的內容如下:

    [ { src: [ 'src/css' ],
    dest: 'dest/css',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/css/base.css' ],
    dest: 'dest/css/base.css',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/css/main.css' ],
    dest: 'dest/css/main.css',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/image' ],
    dest: 'dest/image',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/image/haiys02.jpg' ],
    dest: 'dest/image/haiys02.jpg',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/index.html' ],
    dest: 'dest/index.html',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/js' ],
    dest: 'dest/js',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/js/hellogrunt.js' ],
    dest: 'dest/js/hellogrunt.js',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } },
    { src: [ 'src/js/helloworld.js' ],
    dest: 'dest/js/helloworld.js',
    orig: { expand: true, cwd: 'src/', src: [Object], dest: 'dest' } } ]
  8. template
    grunt.template.process(templateString, options): 處理模板字符串,與grunt.config.process相似但不同,返回string,options中的data屬性存放context
    grunt.template.date(date, format): 格式化日期,format 'yyyy-mm-dd HH:MM:ss'
    grunt.template.today(format): 格式化今天的日期
  9. util
    grunt.util.kindOf(value): 返回值的類型,比typeof詳細
    grunt.util.error(msg[, origError]): 返回一個錯誤
    grunt.util.linefeed: 當前系統的換行符
    grunt.util.normalizelf(string): 將string中的換行符替換成當前系統的換行符
    grunt.util.recurse(array/object, callback, continueFunction):  遞歸傳入array/object的值,如果continueFunction返回false,則返回原值,continueFunction返回true,則返回callback的值。
    var arr = [1, 2, 3],
    result = grunt.util.recurse(arr, function(value) {
    console.log('value ' + value);
    return value * value;
    }, function(value) {
    if(value % 2 === 0)
    return false;
    });
    console.log('result ' + result);

    輸出:

    value
    value
    result ,,

    grunt.util.repeat(n, str): 返回重復n次str的值
    grunt.util.pluralize(n, str, separator): 以separator分隔str并返回第n個元素
    grunt.util.spawn(options, doneFunction): 創建子進程執行任務,子進程退出時調用doneFunction
    options{cmd: command, grunt: false, args: arguments, opts: options, fallback: value}
    grunt.util.toArray(obj): 轉換為數組
    grunt.util.callbackify: 將一個同步函數轉換為異步函數,即將帶返回值的函數轉換為一個傳入回調函數的函數

    function add1(a, b) {
    return a + b;
    }
    function add2(a, b, callback) {
    callback(a + b);
    } var fn1 = grunt.util.callbackify(add1);
    var fn2 = grunt.util.callbackify(add2); var result1 = fn1(1, 2, function(result) {
    console.log('1 plus 2 equals ' + result);
    });
    var result2 = fn2(1, 2, function(result) {
    console.log('1 plus 2 equals ' + result);
    }); console.log(result1);
    console.log(result2);

    輸出:

    1 plus 2 equals 3
    1 plus 2 equals 3
    undefined
    undefined

  好了,這大體就是整個grunt的api介紹了,現在寫一個比較完善和優美的Gruntfile.js應該不是什么問題了吧。
  以后有機會可能會補充些編寫grunt plugin的內容,現在就告一段落了。

  

總結

以上是生活随笔為你收集整理的grunt对象之api的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中日韩精品视频在线观看 | 一区二区在线免费观看视频 | 色婷婷在线播放 | 人人九九 | 久草香蕉视频 | 成年人一级黄色片 | av片在线观看免费 | 国产日韩一区二区在线观看 | 天天干天天操心 | 欧美日韩国产网站 | 成人精品三级 | 正在播放超嫩在线播放 | 特黄色大片 | 日日操狠狠干 | 欧美日韩亚洲国产综合 | 日本乱码一区二区 | 你懂的日韩 | 日韩中文字幕在线 | 国产亚洲欧洲 | 国产欧美一区二区三区在线 | 色呦呦影院 | 国产素人av | 久99精品| 国产农村妇女aaaaa视频 | 午夜在线观看一区 | www麻豆视频 | 老牛影视av一区二区在线观看 | 欧美黄色三级 | 国产三级大片 | 在线播放一区 | 一区二区三区免费观看视频 | 欧美性视频网站 | 极品销魂美女一区二区 | 欧美成人三级在线视频 | 波多野结衣一本 | 亚洲一区二区三区在线免费观看 | 男女av | 日韩久久精品 | 亚洲短视频 | 壮汉被书生c到合不拢腿 | 天天操网 | 欧美一级二级三级视频 | 亚洲欧美一区二区视频 | 日韩二三区 | 色wwwwww | 日韩熟妇一区二区三区 | 乳色吐息在线看 | 九九热免费 | 国产精品一区二区免费 | 一级全黄裸体免费观看视频 | 亚洲午夜精选 | a视频免费 | 色中文在线 | www网站在线免费观看 | 成人天堂av | 美女av影院 | 欧美久久久久久 | 日韩有码一区二区三区 | 人人爱爱 | 国产福利在线观看视频 | 91九色丨porny丨肉丝 | 国产一级在线观看视频 | 亚洲高清av在线 | 葵司av电影 | 蜜桃色av| 亚洲操图 | 伊人久艹 | 成人公开视频 | 精品一二三四区 | 日韩av在线观看免费 | 爱爱激情网 | 国产美女精品在线 | 国产成人精品视频ⅴa片软件竹菊 | 久久久久久蜜桃 | 国产精品高潮视频 | 野外一级片 | 黄色一级欧美 | 婷婷色中文 | 日本理论视频 | 国产精品国语自产拍在线观看 | 国产欧美久久久精品免费 | 麻豆av一区二区三区久久 | 国产高清在线观看视频 | 游戏涩涩免费网站 | www.国产黄色 | 美女一级黄色片 | 日本视频网站在线观看 | 色秀视频在线观看 | 波多野结衣一区二区三区免费视频 | 日韩不卡视频在线观看 | 污污网站在线观看视频 | 精品免费在线 | 奇米四色777 | 波多野结衣在线观看视频 | 草草草在线视频 | 你懂的在线播放 | 日韩成人精品在线 | 97狠狠操| 日批网址 |