grunt-contrib-copy中的“expand”选项是什么?所有示例都使用它,但文档没有解释它的作用。

100
  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', '复制文件。', 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, '选项');
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('正在创建目录:' + dest.cyan); grunt.file.mkdir(dest); tally.dirs++; } else { grunt.verbose.writeln('正在复制文件:' + src.cyan + ' -> ' + dest.cyan); grunt.file.copy(src, dest, copyOptions); tally.files++; } }); });

你是否意识到被采纳的答案是不正确的?请参见下面的这个答案 - David Pärsson
2个回答

84

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

expand 设置为 true 可以启用以下选项:

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

此外,如果将 expand 设置为 true,则似乎始终将 dest 视为目标目录。


更好的答案。但是这没被记录在哪里吗? - syonip
我第二次查找后实际上找到了文档,我已经相应地更新了我的答案。 - David Pärsson
我添加了文档中提供的有用示例。现在更清晰了。 - Rémi Becheras

60

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


4
好的,我明白了。实际上就是mkdir的“-p”选项。明白了,谢谢! - Patrick
6
这个回答不正确。最多算是简化了。 - David Pärsson
3
这是误导性的 - 基于这个答案,我删除了expand: true,认为我不需要它,结果我的构建停止工作了。 - Claudiu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接