grunt-initがファイルをカスタマイズしてコピーするcopyAndProcess()ではgrunt.template.process()を使っていて、それはgrunt.util.normalizelf()を最後に呼んでいる。これによりLFのファイルが環境に合わせてノーマライズされるようになっている。そのためWindowsでは常にCR+LFでファイルが吐かれる。

LFで吐かれるようにするにはgrunt.util.linefeed\nを設定してやれば良いのだけど、grunt-initにはこの設定を変える方法は用意されていない。Issueも立ってるけどGruntに文句言えみたいに返答されていて、それ違うし! みたいな。と、いうことでこれをどうにかしてみようと。

View Commit: Set grunt.util.linefeed for copyAndProcess()

CR+LFで常に吐かれて問題になるのは、LFなリモートのリポジトリにCR+LFでファイルが投げつけられて変更差分がぐちゃぐちゃになること。grunt-initではほぼGitが前提になっているので、Gitの設定でcore.autocrlffalseでリモートにそのまま投げるようになっている環境のみでLFになるように調整してやれば良いのじゃないかと考えた。そのため無設定で良きに図らってくれる感じになる。


$ find . -type f | xargs dos2unix -Uv

何かしら本体で対策が成されるまでは、grunt-init fooした後に続けて、dos2unixを叩いて凌ぐことにした。