ただのブログです

技術的な物とかを主に。主にWeb系がメイン。いつか、職業エンジニアになりたい。

Grunt導入してみた

普段YUI Compressorを使っていたんだけど、Gruntが良いっぽい噂を聞いたのでGruntを試してみる。
あのjQueryもどうやらコレみたい?GitHub見る限りは。

実行環境は

アンチリンゴですし、Linux使ってると一般ユーザーから変な拡張子のファイルが送りつけられるといういじめを受けるので普段の環境はWindowsです。.netとか使うし。

すんなりと実行できたけど、一応やったことをメモ代わりに。初めてのインストール///なので余分な出順やもっと簡単に出来るかもしれないのでそういうのを知っていたら教えてくださいw

まずはnode.jsのインストール

GruntはNode.js上で動くので ここに行き、INSTALLのボタンをぽちっと押す。
入手したのはCurrent Version: v0.10.12

とりあえずNode.jsデフォルトに従うのが無難だと思うので、全てデフォルトでインストール。
インストールが終わったら

npm -v

と実行して

1.2.32

とインストールされているのを確認。

Grunt CLIをインストール

次に、Grunt CLIをインストールする

npm install -g grunt-cli

インストールが終わったら

grunt -version

で確認。

ビルドのための設定を行う

作るファイルは、これを読みながら、書いていく。
まずは、ルートフォルダにpackage.jsonを作成し下記の内容を記入する

{
  "name": "princessjs.extend",
  "version": "0.0.1",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-jshint": "~0.6.0",
    "grunt-contrib-uglify": "~0.2.2"
  }
}
npm install grunt --save-dev

を実行してインストール。
今回はファイル結合が一つの目的なので書き忘れてたconcatも入れる。

npm install grunt-contrib-concat --save-dev

package.jsonが更新されて

{
  "name": "princessjs.extend",
  "version": "0.0.1",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-jshint": "~0.6.0",
    "grunt-contrib-uglify": "~0.2.2",
    "grunt-contrib-concat": "~0.3.0"
  }
}

となった。

で、本命のGruntfile.jsを作成し下記の内容で保存

module.exports = function(grunt) {
    'use strict';
 
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
 
        concat: {
        core: {
                src: [ 'src/*.js', 'src/util/*.js'],
                dest: 'build/<%= pkg.name %>.js'
            },
            extend: {
                src: [ 'src/extend/*.js'],
                dest: 'build/<%= pkg.nameExtend %>.js'
            }
        },
 
        uglify: {
            options: {
                banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
            },
            core: {
                src: 'build/<%= pkg.name %>.js',
                dest: 'build/<%= pkg.name %>.min.js',
            },
            extend: {
                src: 'build/<%= pkg.nameExtend %>.js',
                dest: 'build/<%= pkg.nameExtend %>.min.js',
            }
        },
        jshint: {
            files: ['src/**/*.js'],
            options: {
                jshintrc: '.jshintrc'
            }

        }
    });
 
    // Load grunt tasks from NPM packages
    grunt.loadNpmTasks("grunt-contrib-jshint");
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
 
    // Default grunt
    grunt.registerTask('build', [ 'jshint', 'concat', 'uglify' ]);
 
};

今回はプロトタイプ拡張を別に分ける形で、結合・圧縮してみた。
で、このビルドを実行するには

grunt build

を実行するだけ。

実行するとbuildディレクトリが出来て、princess.js、princess.extend.jsとそれぞれのminが出来上がった。 minの方のコードを見てみると、変数名がaやらbやらjQueryのminと同じになってる!

一応圧縮で壊れていないか心配になったのでJsTestDriverを実行してみてもALLグリーン。
やったね!たえちゃん

今回実行したプロジェクトはここにあります