09

Gruntを開発環境に追加した

以前intra-mart Accel Platformの開発環境がmacだというような話を書いたが、その続き。 多言語ファイルのnative2asciiだとかソースのファイルをいじったら自動的に処理してほしい系のファイルがあるんだけど、これをGruntにお任せしたい。

ガイドに従ってまずはpackage.jsonを追加

{
  "name": "project-name",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-jshint": "~0.6.3",
    "grunt-contrib-nodeunit": "~0.2.0",
    "grunt-contrib-uglify": "~0.2.2",
    "grunt-contrib-watch": "~0.5.3",
    "grunt-native2ascii": "~0.1.0",
    "grunt-contrib-symlink": "~0.2.0"
  },
  "webArchiveDir" : "test"
}

上記は現在の状態で、最初は依存モジュールのうち、jshint, nodeunit, uglify 以外は入っていなかった。依存モジュールというかプラグインは npm でインストールしていくのだが

$ npm install grunt-contrib-watch --save-dev

この--save-devオプションがpackage.jsonを自動的に追記してくれる。

Gruntfile.jsは以下のように書いてみた。 とりあえずnative2asciiはうまく言ったので満足している。symlinkの方はまだ試していない。

module.exports = function(grunt){

    grunt.initConfig({
        pkg : grunt.file.readJSON('package.json'),
        native2ascii : {
            n2aPluginProps : {
                files : [{
                    expand : true,
                    cwd : 'src/main/generator/plugin',
                    src : '**/*.properties',
                    dest : 'src/main/plugin/'
                }]
            }
        },
        symlink : {
            jssp : {
                files :[{
                    expand : true,
                    cwd : 'src/main/jssp/src/',
                    src : '*',
                    dest: '<%= pkg.webArchiveDir %>/WEB-INF/jssp/src/'
                }]
            },
            conf_dir : {
                files :[{
                    expand : true,
                    cwd : 'src/main/conf',
                    src : '*',
                    dest: '<%= pkg.webArchiveDir %>/WEB-INF/conf/'
                }]
            },
            conf_file : {
                files :[{
                    expand : true,
                    cwd : 'src/main/conf',
                    src : '**/*.xml',
                    dest: '<%= pkg.webArchiveDir %>/WEB-INF/conf/'
                }]
            },
            plugin : {
                files :[{
                    expand : true,
                    cwd : 'src/main/plugin',
                    src : '*',
                    dest: '<%= pkg.webArchiveDir %>/WEB-INF/plugin/'
                }]
            },
            webapp : {
                files :[{
                    expand : true,
                    cwd : 'src/main/webapp',
                    src : '*',
                    dest: '<%= pkg.webArchiveDir %>/'
                }]
            }
        }
    });

    grunt.loadNpmTasks('grunt-native2ascii');
    grunt.loadNpmTasks('grunt-contrib-symlink');
    grunt.registerTask('default', ['native2ascii']);
};

次はwatchで自動的にやらせるようにしたい。