このエントリを読んでこのエントリを書いたんですが、もっと構成を簡単にできそうだったので書きなおしてみました。
構成
- Gruntfile.js
- package.json
- /Gruntconfig
- タスクモジュール
先のエントリではconfig.js
で/Gruntconfig
内のモジュールを自動で読み込むようにしたのですが、そもそも自動で読むならconfig.js
としてファイルを分ける必要がありませんでした。
なのでconfig.js
でやっていたことをGruntfile.js
に記述して、/Gruntconfig
フォルダにはタスクのモジュールだけを入れるようにしました。
Gruntfile
Gruntfile.js
module.exports = function(grunt) {
var configDir, fs, packageJson, path;
configDir = "Gruntconfig";
fs = require("fs");
path = require("path");
fs.readdirSync(configDir).forEach(function(filePath) {
var fileName, modulePath, stats;
modulePath = path.join(__dirname, configDir, filePath);
stats = fs.statSync(modulePath);
fileName = filePath.split(".")[0];
if (stats.isFile() && filePath.charAt(0) !== "." && filePath.charAt(0) !== "_") {
return grunt.config.set(fileName, require(modulePath));
}
});
packageJson = grunt.file.readJSON("package.json");
Object.keys(packageJson.devDependencies).slice(1).forEach(grunt.loadNpmTasks);
grunt.registerTask("default", ["connect", "watch"]);
};
タスクモジュール
/Gruntconfig
に置くタスクモジュールは以下のような記述。置いたモジュールは自動で読み込まれます。使いたいモジュールのgruntプラグインはpackage.json
のdevDependencies
に記述されている必要があります。
/Gruntconfig/connect.js
/* connect*/
module.exports = {
dist: {
options: {
port: 5000,
base: ".",
open: "http://localhost:5000"
}
}
};
/Gruntconfig/watch.js
/* watch*/
module.exports = {
reload: {
files: ["./*.html", "./css/*.css", "./js/*.js"],
options: {
livereload: true
}
}
};
その他変更点
- ファイル名の先頭が
.
だった場合に無視する - ファイル名の先頭が
_
だった場合に無視する
と、.DS_Store
とかを無視するのと、一時的に読み込みたくないモジュールはファイル名の先頭に_
をつけることで読み込まないようにできます。(フォルダの階層を一個深くすることでも読み込まないようにできます)
前よりスッキリしました。
今回自前で書いてみましたが、すでに同じようなプラグインがあってインストールすれば簡単に使えたりします。
Grunt深い。