はじめに
Yeomanのカスタムジェネレータでは、テンプレートファイルのコピーを絶対やりますよね。
http://yeoman.io/authoring/file-system.html
この公式ドキュメントにはcopyTpl()
関数だけ載ってますけど、ファイルをそのまんまコピー、しかも特定フォルダ配下をそのまんま一括コピーしたいときは、もっと簡単な方法があります。
this.fs.copy()
関数を使う方法
シンプルなコピー
generators/app/templates/static
ってフォルダを作っておいて、そのまんまコピーしたいテンプレートファイルはその中に全部つっこんで以下のように書くと、static
配下の全ファイル・フォルダを、ジェネレータで作成するプロジェクトのルート配下に綺麗にコピーしてくれます。
第二引数のthis.destinationRoot()
がポイントですね。
writing() {
// Copy all static files
this.fs.copy(this.templatePath('static'), this.destinationRoot())
}
ただこれだと、ドットで始まる隠しファイル・ディレクトリは無視されちゃうのです。
ドットファイルも含める
ドットファイルも含めてコピーしたいときは、copy()
の第三引数にオプションをつければOK。
writing() {
// Copy all static files
this.fs.copy(this.templatePath('static'), this.destinationRoot(), {
globOptions: { dot: true },
})
}
解説
Yeomanのthis.fs
配下のメソッドはmem-fs-editorというライブラリが実体のようです。
copyメソッドの第三引数にoptions
オブジェクトを任意で渡せて、3種類のキーを指定可能。
- process
- よく分からんかったのでスルー
- ignoreNoMatch
-
true
を指定すると、第一引数のfrom
ファイルが見つからなくてもスルーして処理を続ける
-
- globOptions
- ファイルのマッチングパターンをオブジェクトで細かく指定する
- fast-globライブラリのOptionsを指定
-
dot: false
がデフォルトなので、true
にするとドットファイル有効
参考ドキュメント
http://yeoman.io/authoring/file-system.html
https://github.com/sboudrias/mem-fs-editor
https://github.com/mrmlnc/fast-glob
https://github.com/yeoman/generator/issues/642