11

私はもともと grunt-init で作成したカスタム ジェネレーターに取り組んでいます。私が気付いている違いの 1 つは、grunt-init がルート内のすべてのファイルをテンプレートとして自動的に処理することですが、yeoman ジェネレーターでは、.template() を使用してこれを行う必要があります。.template() を使用して個々のファイルを処理する方法に精通していますが、ディレクトリ全体を処理することは可能ですか?

4

3 に答える 3

11

この問題は悩ましい問題です。初めて yeoman を使用したときにこれに出会いました。以下のコード スニペットが役立つと思います。

this.directory('scripts', 'scripts');// script is folder name
于 2013-12-19T09:14:09.820 に答える
7

Yeoman ジェネレーター コードを見ると、これを行う方法が組み込まれていないようです。これを解決した方法は、組み込みのジェネレーター コードからコードの一部をコピーし、必要に応じて変更することでした。_ファイルの名前を変更してプレフィックスを除外したいので、ファイルがプレフィックス規則に基づいてテンプレートであるかどうかを判断しますが、すべてのファイルをテンプレートとして扱うだけで問題なく動作します。これにより、ディレクトリ内のすべてのファイルがコピーされるため、.DS_STOREOSX でデフォルトで検出されるファイルを除外することも行いましたが、これは特定のケースであるため、ここには含めませんでした。

require('path');

MyGenerator.prototype._processDirectory = function(source, destination) {
    var root = this.isPathAbsolute(source) ? source : path.join(this.sourceRoot(), source);
    var files = this.expandFiles('**', { dot: true, cwd: root });

    for (var i = 0; i < files.length; i++) {
        var f = files[i];
        var src = path.join(root, f);
        if(path.basename(f).indexOf('_') == 0){
            var dest = path.join(destination, path.dirname(f), path.basename(f).replace(/^_/, ''));
            this.template(src, dest);
        }
        else{
            var dest = path.join(destination, f);
            this.copy(src, dest);
        }
    }
};
于 2013-11-30T16:14:31.933 に答える