首页 文章

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

提问于
浏览
96
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++;
        }
      });
    });

2 回答

  • 76

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

  • 57

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

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

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

相关问题