简单的grunt-copy .txt文件变空

时间:2014-02-03 19:48:21

标签: gruntjs

我正在学习咕噜咕噜并尝试做我认为简单的事情:复制一个文本文件。

copy: {
    main: {
        src: 'app/text.txt',
        dest: 'build/copied.txt'
    }
}

运行时不会产生错误,文件被“复制”,但build/copied.txt包含单个句点字符而不是app/text.txt文件的内容。

为什么/它会这样做?

后续修改

  1. 首先我安装了grunt-copygrunt-contrib-copy模块。这种方式有所不同,并且有一些标点选项,我相信这是神秘时期的来源。
  2. 2nd + facepalm:我有一个错字,app/test.txt应该是text。这个QA中的任何人都不明白,因为我没有发布我的文件列表。但是...
  3. 使用--verbose标签进行调试,因为它显示缺少src,这让我发现了愚蠢的错字。
  4. 以上代码可以工作!

2 个答案:

答案 0 :(得分:1)

嗯,我假设你正在使用(grunt-contrib-copy),我调试了这个问题,似乎复制(单个.txt文件名称)不起作用它适用于.js和许多其他文件?但是你可以让.txt文件副本像这样工作,如果再次遇到权限问题,会有一个名为 mode 的选项。

copy: {
  main: {
    flatten: true,
    src: ["app/*.txt"],
    dest: "build/",
    expand: true,
    rename: function (dest, src) {
      // rename test.txt to copied.txt
      if (src === "test.txt") {
        return dest + "copied.txt";
      }
      return dest + src;
    }
  }
}

但是我会在不重命名的情况下执行此类操作,很明显build文件夹包含您复制的文件,所以我更喜欢将它们复制原样:

copy: {
  main: {
    flatten: true,
    src: ["app/*.txt"],
    dest: "build/",
    expand: true
  }
}

请注意,因为单个文件匹配src: ["app/test.txt"](对于.txt格式)不起作用,如果您遇到复制太多文本文件的问题,可以将其单独放在不同的文件夹中并像使用它一样这样:

copy: {
  single: {
    flatten: true,
    src: ["app/single/*.txt"],
    dest: "build/",
    expand: true
  },
  other: {
    /* ... */
  }
}

和任务:

grunt.registerTask("testCopy", ["copy:single"]);

并运行它:

grunt testCopy

答案 1 :(得分:0)

默认情况下,copy任务仅复制,而不是重命名。因此,您正在做的是在copied.txt目录中创建名为build的目录。要在副本上重命名文件,您需要使用rename选项。这不是copy任务的功能,而是它使用的file选项的一般功能(许多其他任务使用此常用选项)。您可以看到documentation on the Grunt site,只需在该页面上找到“重命名”。

copy: {
    main: {
        src: 'app/text.txt',
        dest: 'build/',
        rename: function(dest, src, options) {
            return path.join(dest, "copied.txt");
        }
    }
}