"扩展"选项在grunt-contrib-copy中做了什么?这些例子都使用它,但文档没有说明它的作用

Pat*_*ick 98 javascript gruntjs

  1. 以下是README和示例: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 = function(grunt) {
  'use strict';

  var path = require('path');

  grunt.registerMultiTask('copy', 'Copy files.', function() {
    var kindOf = grunt.util.kindOf;

    var options = this.options({
      processContent: false,
      processContentExclude: []
    });

    var copyOptions = {
      process: options.processContent,
      noProcess: options.processContentExclude
    };

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

    var dest;
    var isExpandedPair;
    var tally = {
      dirs: 0,
      files: 0
    };

    this.files.forEach(function(filePair) {
      isExpandedPair = filePair.orig.expand || false;

      filePair.src.forEach(function(src) {
        if (detectDestType(filePair.dest) === 'directory') {
          dest = (isExpandedPair) ? filePair.dest : unixifyPath(path.join(filePair.dest, src));
        } else {
          dest = filePair.dest;
        }

        if (grunt.file.isDir(src)) {
          grunt.verbose.writeln('Creating ' + dest.cyan);
          grunt.file.mkdir(dest);
          tally.dirs++;
        } else {
          grunt.verbose.writeln('Copying ' + src.cyan + ' -> ' + dest.cyan);
          grunt.file.copy(src, dest, copyOptions);
          tally.files++;
        }
      });
    });

Dav*_*son 82

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

设置expandtrue启用以下选项:

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

此外,dest如果设置expand为,似乎总是被视为目标目录true.


Vla*_*iev 58

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

  • 这个答案是不正确的.它至多是简化的. (6认同)
  • 啊,所以它实际上是mkdir的-p选项.知道了谢谢! (4认同)
  • -1.这是误导 - 根据这个答案,我删除了`expand:true`,认为我不需要它,然后我的构建停止了工作. (3认同)