5

grunt.config で、src から dest にファイルを grunt-contrib-copy するタスクをセットアップできることを知っています。Grunt のドキュメントを調べると、grunt.file.copy を使用して単一のファイルをコピーできることがわかります。

しかし、bash から送信される引数に対応するために、カスタム登録タスクでその場で grunt-contrib-copy タスクを作成することは可能ですか? 新しいディレクトリ grunt.file.mkdir("some/path/appfoldername") を作成し、別の宛先からそのフォルダーにファイルをコピーしたいのですが、カスタム タスクが実行されるまでフォルダー名がわかりません。次のようなものです:

grunt create_app:appfoldername

したがって、一度に 1 つのファイルを 1 つずつコピーできますが、ファイルは変更されるため、grunt-contrib-copy の機能が必要ですが、カスタム登録タスクの柔軟性が必要です。

私の説明が十分に明確でない場合、次のようなものを想像します。

grunt.registerTask('createCopy', 'Create a copy', function(folderName) {

    var cwd = grunt.template.process("some/path/to/app");
    var src = grunt.template.process("some/path/to/src");
    var dest = grunt.template.process("some/path/to/dest") + folderName;

    grunt.task.run('copy: {  
       files: { 
          cwd: cwd,
          src: src,
          dest: dest
       }           
    }');
}

アップデート

grunt.registerTask('mkapp', 'Create Application', function(appName) {

    // Check appName is not empty or undefined
    if(appName !== "" && appName !== undefined) { 

        // Require node path module, since not a global
        var path = require("path");

        // Resolve directory path using templates
        var relPath = grunt.template.process("<%= root %>/<%= dirs.src %>/application/");
        var srcPath = relPath + "default_install";
        var destPath = relPath + appName;

        // Create new application folder
        grunt.file.mkdir(destPath, 0444);

        // Return unique array of all file paths which match globbing pattern
        var options = { cwd: srcPath, filter: 'isFile' };
        var globPattern = "**/*"

        grunt.file.expand(options, globPattern).forEach(function(srcPathRelCwd) {

            // Copy a source file to a destination path, creating directories if necessary
            grunt.file.copy(
                path.join(srcPath, srcPathRelCwd), 
                path.join(destPath, srcPathRelCwd)
            );
        });
    }
});
4

2 に答える 2