ストレスフリーなGruntタスクの自動読み込み

ストレスフリーなGruntタスクの自動読み込み

Gruntfileの中でパッケージの読み込みを羅列して書くのが非常に面倒くさいと思うことがあります。
特に後から追加したり、やっぱり使わなかったということが多々ありますよね。
そこでGruntの設定に少しでも時間を取られないために読み込みを自動化します。

通常の読み込み

    grunt.loadNpmTasks('grunt-contrib-connect');
    grunt.loadNpmTasks('grunt-contrib-compass');
    grunt.loadNpmTasks('grunt-contrib-coffee');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-open');

タスク読み込みの自動化

package.jsonの設定を読み込む

'use strict';

module.exports = function (grunt) {

    grunt.initConfig({
        // プロジェクトのpackage.jsonを読み込む
        pkg: grunt.file.readJSON('package.json'),

        connect: {
            ...
        },
        compass: {
            ...
        }
        coffee: {
            ...
        }
        open: {
            ...
        }
        uglify: {
            ...
        }
        watch: {
            ...
        }
    });

    // package.json内のdevDependenciesオブジェクトのキー名で
    // 「grunt-」で始まるものを読み込む
    for(task in grunt.config.data.pkg.devDependencies) {
        if(/^grunt-/.test(task)) {
            grunt.loadNpmTasks(task);
        }
    }

};

Gruntfile.jsの他にGruntfile.coffeeでも

個人的にはGruntを使う時のGruntfileはJavascriptではなくてcoffeescriptを使って書いています。
Grunt自体にcoffeescriptが内包されているので、以下のようにcoffeescriptで記述できるわけです。
そっちのほうが直感的で単純に見やすい。

'use strict'

module.exports = (grunt) ->

    grunt.initConfig

        pkg: grunt.file.readJSON 'package.json'

        connect:
            ...
        compass:
            ...
        coffee:
            ...
        open:
            ...
        uglify:
            ...
        watch:
            ...

    for task of grunt.config.data.pkg.devDependencies
        if /^grunt-/.test task then grunt.loadNpmTasks(task)

他にも

自分は使っていないけど、こうゆうパッケージもあります。
load-grunt-tasks

上で紹介したやり方で簡潔に書けるので、load-grunt-tasksは使っていません。

五十川 洋平(Yohei Isokawa)

五十川 洋平(Yohei Isokawa)

フロントエンドエンジニア/面白法人カヤックなどのWeb制作会社に勤務したのち、故郷の新潟に戻り独立。JSフレームワークAngularやFirebase、Google Cloud Platformを使ったWebアプリ開発が得意。 また、Udemyのプログラミング解説の講師、writer.appの自主開発や上越TechMeetupの主催などを行っています。

プロフィール

©Copyright 2022 Yohei Isokawa All Rights Reserved.