gpt4 book ai didi

javascript - Grunt-Contrib-Copy,如何在不覆盖目标文件夹中现有文件/文件夹的情况下复制保持相同文件夹结构的目录内容?

转载 作者:行者123 更新时间:2023-11-30 20:58:22 26 4
gpt4 key购买 nike

源代码结构```文件夹

|----Sub-Folder-1
| |-a.js
| |-b.js
|----Sub-Folder-2
| |-c.js
|-d.js
|-e.js
```

运行复制任务之前的目标结构```文件夹

|----Sub-Folder-1
| |-a.js
|-e.js
```

我需要目标文件夹与 src 文件夹完全相同,但我不想覆盖现有文件,如上例中的 a.js 和 e.js 已经存在,因此不应触摸它们,其他应该创建文件/文件夹,所以我想递归检查“文件夹”内部是否存在文件,如果不存在则复制它。我一直在使用以下过滤器来不覆盖单个文件过滤器:函数(文件路径){ 返回!(grunt.file.exists('dest')); } 但'文件夹包含多个子目录和文件,因此为每个文件编写是不可行的。请帮助编写可以执行此操作的自定义 grunt 任务。

最佳答案

这可以通过在 grunt-contrib-copyfilter 函数中添加自定义逻辑来实现。目标是执行以下操作:

  1. 利用 nodejs path帮助确定结果路径的模块。
  2. 利用grunt.file.exists判断一个文件是否已经存在于它的目标路径中.

以下要点演示了如何跨平台实现您的要求:

Gruntfile.js

module.exports = function (grunt) {

'use strict';

var path = require('path'); // Load additional built-in node module.

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

grunt.initConfig({
copy: {
non_existing: {
expand: true,
cwd: 'src/', // <-- Define as necessary.
src: [ '**/*.js' ],
dest: 'dist/', // <-- Define as necessary.

// Copy file only when it does not exist.
filter: function (filePath) {

// For cross-platform. When run on Windows any forward slash(s)
// defined in the `cwd` config path are replaced with backslash(s).
var srcDir = path.normalize(grunt.config('copy.non_existing.cwd'));

// Combine the `dest` config path value with the
// `filepath` value excluding the cwd` config path part.
var destPath = path.join(
grunt.config('copy.non_existing.dest'),
filePath.replace(srcDir, '')
);

// Returns false when the file exists.
return !(grunt.file.exists(destPath));
}
}
}
});

grunt.registerTask('default', [ 'copy:non_existing' ]);
};

关于javascript - Grunt-Contrib-Copy,如何在不覆盖目标文件夹中现有文件/文件夹的情况下复制保持相同文件夹结构的目录内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47402021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com