100
  1. 这是自述文件和示例:https ://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md 。
  2. 这是来自https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js的代码的相关部分(我显然无法理解):
module.exports = 功能(咕噜声){
  '使用严格';

  var path = require('path');

  grunt.registerMultiTask('copy', '复制文件。', function() {
    var kindOf = grunt.util.kindOf;

    var options = this.options({
      处理内容:假,
      处理内容排除:[]
    });

    var 复制选项 = {
      流程:options.processContent,
      noProcess:options.processContentExclude
    };

    grunt.verbose.writeflags(options, 'Options');

    变量目标;
    var isExpandedPair;
    变量计数 = {
      目录:0,
      文件:0
    };

    this.files.forEach(函数(文件对){
      isExpandedPair = 文件对.orig.expand || 错误的;

      文件对.src.forEach(函数(src){
        if (detectDestType(filePair.dest) === '目录') {
          dest = (isExpandedPair) ? filePair.dest : unixifyPath(path.join(filePair.dest, src));
        } 别的 {
          dest = 文件对.dest;
        }

        if (grunt.file.isDir(src)) {
          grunt.verbose.writeln('创建' + dest.cyan);
          grunt.file.mkdir(dest);
          理货.dirs++;
        } 别的 {
          grunt.verbose.writeln('正在复制 ' + src.cyan + ' -> ' + dest.cyan);
          grunt.file.copy(src, dest, copyOptions);
          理货.文件++;
        }
      });
    });
4

2 回答 2

84

由于expand它是 Grunt 的一部分,而不是特定于 grunt-contrib-copy,因此可以在Grunt 的文件配置 API中找到有关它的信息:

设置expandtrue启用以下选项:

  • cwd所有src匹配都相对于(但不包括)此路径。
  • src要匹配的模式,相对于cwd.
  • dest目标路径前缀。
  • extdest在生成的路径中用此值替换任何现有扩展。
  • extDot用于指示表示分机的句点所在的位置。可以采用'first'(扩展名在文件名的第一个句点之后开始)或'last'(扩展名在最后一个句点之后开始),默认设置为'first'.
  • flatten从生成的路径中删除所有路径部分dest
  • rename为每个匹配的文件调用此函数src(在扩展名重命名和展平之后)。dest传入和匹配的src路径,这个函数必须返回一个新dest值。如果dest多次返回相同的内容,src则使用它的每个都将添加到它的源数组中。

此外,如果设置为 ,它似乎dest总是被视为目标目录。expandtrue

于 2015-03-06T14:02:59.003 回答
60

Expand 允许您指定是否要创建完整的目标路径(例如:)/path/missing1/missing2,或者仅在其父目录存在时创建最后一个目录(/path/existing/missing)。

于 2013-06-07T06:54:33.423 回答