LoginSignup
8

More than 5 years have passed since last update.

configローダーでGruntのタスクモジュールの管理を自動化する

Posted at

Gruntfile.jsを10行にした話@watilde

このエントリのやり方が気に入ったので自分の真似してGruntfileをダイエットさせた。

Gruntダイエットで健やかな開発を

config書くのだけめんどくさい

すごく良いやり方だと思ったけど、config.jsを自分で追記していくのが若干めんどうだし、自動でできればモジュール追加が捗る〜と思って書いてみた。

config.js
/* config */
var configName, fs;

fs = require("fs");

configName = __filename.split("/").reverse()[0].split(".")[0];

fs.readdirSync(__dirname).forEach(function(filePath) {
  var fileName, stats;
  stats = fs.statSync(__dirname + "/" + filePath);
  fileName = filePath.split(".")[0];
  if (stats.isFile() && fileName !== configName) {
    return module.exports[fileName] = require(__dirname + "/" + filePath);
  }
});

やってること

  • nodeのfsを使ってconfig.jsのあるフォルダの中身を取得(同期でやらないとうまくいかない)。
  • ファイルかどうか判定 && そのファイルがコンフィグファイルじゃないか確認
  • exports!!

これでconfig.jsと同じ階層にあるモジュールを全部読み込んでexportsしてくれる。良い。


かなり便利になった。でも同じ階層にあるモジュールファイルを問答無用で読み込む。使わないモジュールだろうがなんだろうが読み込むので、モジュールが増えすぎた場合パフォーマンスに影響がでることがあるかも?

おまけ

いい機会だと思ったのでGruntのためだけにCoffeeを覚えた。短くて良いけどチェーン書きづらい。

config.coffee
### config ###
fs = require "fs"
configName = __filename.split("/").reverse()[0].split(".")[0]

fs.readdirSync(__dirname).forEach (filePath) ->
  stats = fs.statSync __dirname + "/" + filePath
  fileName = filePath.split(".")[0]

  if stats.isFile() and fileName isnt configName
    module.exports[fileName] = require __dirname + "/" + filePath

自分用のGruntテンプレもいい感じにスッキリして大変満足( ˘ω˘ )

nakajmg/GruntTemplate

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8