grunt-contrib-copy中的“ expand”选项有什么作用?这些示例都使用它,但是文档没有说明它的作用


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 = function(grunt){
  “使用严格”;

  var path = require('path');

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

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

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

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

    var dest;
    var isExpandedPair;
    var tally = {
      目录:0,
      档案:0
    };

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

      filePair.src.forEach(function(src){
        如果(detectDestType(filePair.dest)==='目录'){
          dest =(isExpandedPair)吗?filePair.dest:unixifyPath(path.join(filePair.dest,src));
        }其他{
          dest = filePair.dest;
        }

        如果(grunt.file.isDir(src)){
          grunt.verbose.writeln('Creating'+ dest.cyan);
          grunt.file.mkdir(dest);
          tally.dirs ++;
        }其他{
          grunt.verbose.writeln('正在复制'+ src.cyan +'->'+ dest.cyan);
          grunt.file.copy(src,dest,copyOptions);
          tally.files ++;
        }
      });
    });

您是否知道接受的答案不正确?请参阅下面的答案
大卫·派森(DavidPärsson),

Answers:


59

展开可让您指定是要完整创建目标路径(例如/path/missing1/missing2),还是仅在其父目录存在时创建最后一个目录(/path/existing/missing)。


4
嗯,所以它实际上是mkdir的-p选项。知道了谢谢!
帕特里克

6
这个答案是不正确的。充其量可以简化。
戴维·派森(DavidPärsson)

3
-1。这具有误导性-根据我删除的答案expand: true,认为我不需要它,然后构建停止工作。
Claudiu

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


更好的答案。但这在任何地方都没有记录吗?
syonip 2015年

我实际上是在第二次查看后才找到文档的,因此我相应地更新了答案。
戴维·派森(DavidPärsson)

我添加了文档中提供的有用示例。现在更清楚了。
雷米Becheras
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.