【问题标题】:Running grunt.file.copy returns Error code: ENOENT运行 grunt.file.copy 返回错误代码:ENOENT
【发布时间】:2015-01-06 02:47:14
【问题描述】:

我想使用 Grunt 任务将目录复制到不同的位置。我不希望它在运行副本的默认任务中运行,因此我正在使用以下代码为其注册一个名为“myTask”的新任务:

  grunt.registerTask('myTask', 'Make new dir and copy "src" there', function() {
    grunt.file.copy('src/*','../dest/');
  });

每当我运行 myTask 时,它都会告诉我:

警告:无法读取“src/*”文件(错误代码:ENOENT)。使用 --force 继续。

我从中复制的源目录是否缺少某种语法?

【问题讨论】:

  • 我认为grunt.file.copy() 可能只会将文件从一个地方复制到另一个地方,而不是整个目录。但除此之外,为什么不在grunt-contrib-copy 任务中设置两个不同的grunt-contrib-copy 目标并指定要运行的目标呢?
  • @jakerella 我不确定如何指定将在我的默认任务中运行的复制目标。我不会将它们都包含在 grunt.initConfig 函数中并且它们都会自动运行吗?此外,似乎我可以使用 grunt.file.copy(".") 复制所有文件,但这会引发相同的错误。
  • 是的,您不能使用此功能来复制目录或文件列表……只能复制单个文件。我将添加一个关于如何使用copy 目标来完成此任务的答案。

标签: javascript gruntjs


【解决方案1】:

您提到您已经使用了copy 任务,但不想在您的default 任务中包含此特定复制...所以我建议在您的配置中使用多个目标并指定要执行的目标在您的default 任务数组中:

grunt.initConfig({
  copy: {
    js: {
      files: [{
        expand: true,
        src: ['path/to/js/*.js'],
        dest: 'dest/js'
      }]
    },
    otherstuff: {
      files: [{
        expand: true,
        src: ['src/**'],
        dest: 'dest/'
      }]
    }
  },
  // ...
});

// notice that in our default task we specify "copy:js"
grunt.registerTask('default', ['jshint', 'concat', /* etc, */ 'copy:js']);

现在您可以将~$ grunt copy:otherstuff~$ grunt copy:js 分开运行,当您只运行~$ grunt 时,它将运行仅运行copy:js 的默认任务。

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2017-05-24
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多