日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美一卡二卡三卡 | 色婷网| 日日操夜夜草 | 久久久久久亚洲精品 | 天天干天天日夜夜操 | 黄色美女视频网站 | 国产成人aaaa| 国产黄色片免费在线观看 | 一级国产视频 | 狠狠躁夜夜躁人人爽天天高潮 | 原创真实夫妻啪啪av | 亚洲色图第一页 | 美女脱光衣服让男人捅 | 免费av不卡 | 四虎影视www在线播放 | 国产精品一区二区三区免费视频 | 熟女一区二区三区视频 | 久久久影院 | 国产黄色一级网站 | 久草热视频 | 欧美日本在线播放 | 欧美激情在线观看一区 | 亚洲情在线 | 在线观看色网 | 久久久久久久久久久丰满 | 草久久av| 毛片在线网站 | 91精品免费观看 | 日韩精品一区二区三区免费视频 | 性xx紧缚网站 | 性xxxx视频| 韩国美女一区 | 可以直接在线观看的av | 午夜黄色福利 | 欧美激情电影一区二区 | 欧美91视频 | 日韩深夜福利 | 好吊色欧美一区二区三区视频 | www.日韩.com| 欧美日韩高清一区二区 国产亚洲免费看 | 成人综合一区 | 精品福利一区二区三区 | 在线观看三级网站 | 国产精欧美一区二区三区蓝颜男同 | 97视频在线免费观看 | 玖玖爱国产 | 久久不卡影院 | 日韩欧美高清dvd碟片 | 亚洲精品乱码久久久久久国产主播 | 第一毛片| 成人二三区 | 手机在线精品视频 | 欧美在线一二三四区 | 亚洲美女视频一区 | 在线播放黄色网址 | 欧美88av | 精品一区二区在线免费观看 | 国产日本在线观看 | 狠狠艹av| 在线视频97| 国产精品美乳在线观看 | 国产女主播喷水高潮网红在线 | 中文字幕一区二区三区乱码不卡 | 久久这里只有精品23 | 日韩av首页 | 蜜臀人妻四季av一区二区不卡 | 国产欧美精品在线观看 | 国产色图视频 | 丁香婷婷综合激情 | 神马久久av | 天天躁日日躁狠狠躁伊人 | 成人国产精品蜜柚视频 | 99热在线免费观看 | 欧美女同视频 | 成年人毛片 | 亚洲精品男女 | 午夜成人免费影院 | 你懂的在线观看网站 | 少妇一级免费 | 国产夫妻在线观看 | 国产五十路 | 黄色网在线播放 | 丁香九月激情 | 色窝| 波多野吉衣av在线 | 亚洲综合在线成人 | 思思99精品视频在线观看 | 一区在线视频 | 女教师痴汉调教hd中字 | 亚洲成人精品av | 国产午夜一级一片免费播放 | 欧美黄色三级视频 | 亚洲干综合 | 精品免费一区二区三区 | 韩日欧美 | 色播久久 | 亚洲一区网 | 久久久久久九九九九 | 免费黄色一级 |