首页 > 解决方案 > 咕噜任务副本未能将文件写入目标

问题描述

我是 gruntjs 的新手,很难理解为什么简单的复制文件任务不起作用。下面是我在 Gruntfile.js 中的代码。

module.exports = function (grunt) {
    "use strict";

    // Project configuration
    grunt.initConfig({
        pkg: grunt.file.readJSON("package.json"),

        // copy other css files
        copy: {
            dist: {
                files: {
                    //expand: true, // required when using cwd
                    //cwd: ['.'], // set working folder / root to copy
                    src: './wwwroot/lib/html5-reset/assets/css/reset.css', // copy all files and subfolders
                    dest: './wwwroot/css/' // destination folder
                }
            }
        }
    });

    grunt.loadNpmTasks("grunt-contrib-copy");

    grunt.registerTask("copyCss", ["copy"]);
};

当我执行任务时出现以下错误

正在加载“Gruntfile.js”任务...OK
+ copyCss
运行任务:复制
运行“复制”任务
运行“复制:dist”(复制)任务
验证属性 copy.dist 存在于配置中...确定
文件:./wwwroot/ lib/html5-reset/assets/css/
reset.css -> src 文件:./wwwroot/css/ -> dest
选项:encoding="utf8", processContent=false, processContentExclude=[], timestamp=false, mode= false
复制 .​​/wwwroot/lib/html5-reset/assets/css/reset.css -> src
读取 ./wwwroot/lib/html5-reset/assets/css/reset.css...OK
写入 src...错误
警告:无法写入“src”文件(错误代码:EISDIR)。使用--force,继续。
完成,但有警告。
进程以代码 0 终止。

感谢您在查明问题方面的帮助。

标签: gruntjsgrunt-contrib-copyasp.net-core-3.1

解决方案


nodejs错误EISDIR描述为:

EISDIR(是一个目录):一个操作需要一个文件,但给定的路径名​​是一个目录。

Gruntfile.js如下所示配置您的。

Gruntfile.js

module.exports = function (grunt) {
  "use strict";

  // Project configuration
  grunt.initConfig({
    pkg: grunt.file.readJSON("package.json"),

    copy: {
      dist: {
        expand: true,
        cwd: 'wwwroot/lib/html5-reset/assets/css',
        src: 'reset.css',
        dest: 'wwwroot/css'
      }
    }
  });

  grunt.loadNpmTasks("grunt-contrib-copy");
  grunt.registerTask("copyCss", ["copy"]);
};

运行以下命令:

grunt copyCss

reset.css将从目录命名的文件复制wwwroot/lib/html5-reset/assets/css/wwwroot/css/目录中。

之前的例子:

.
├── Gruntfile.js
├── node_modules
│   └── ...
├── package.json
└── wwwroot
    └── lib
        └── html5-reset
            └── assets
                └── css
                    └── reset.css   <--------------

示例之后:

.
├── Gruntfile.js
├── node_modules
│   └── ...
├── package.json
└── wwwroot
    ├── css
    │   └── reset.css               <--------------
    └── lib
        └── html5-reset
            └── assets
                └── css
                    └── reset.css   <--------------

编辑:创建自定义任务而不是使用grunt-contrib-copy

如果您只想复制一个文件,那么使用grunt-contrib-copy似乎有些不必要。考虑改为创建自定义任务。例如:

Gruntfile.js

module.exports = function (grunt) {
  "use strict";

  grunt.initConfig({
    pkg: grunt.file.readJSON("package.json")
  });

  grunt.registerTask('copyCss', 'Copies a single file', function() {
    grunt.file.copy(
      'wwwroot/lib/html5-reset/assets/css/reset.css',
      'wwwroot/css/reset.css'
    )
  });

};
  • 上述自定义任务利用了 grunt 的内置grunt.file.copy方法。

  • 您可能还想考虑向该自定义任务添加一些错误处理。例如,您可能想利用 grunt 的内置grunt.file.exists方法来检查reset.css文件是否存在,然后再继续复制它。


推荐阅读