在grunt中不存在时创建文件/文件夹的任务

shr*_*iek 4 javascript node.js gruntjs yeoman

我正在尝试自动化我的测试,并且想要为在src文件夹上创建的任何javascript自动创建测试文件.这是我文件夹结构的细分.

js
--src
  --sum.js
  --subtract.js
  --calculator.js
  --innerFolder
    --multiply.js
    --divide.js
--specs
Run Code Online (Sandbox Code Playgroud)

所以从上面的文件夹结构我想要做的是只有当目标文件夹上的文件不存在时才在我的规范上创建所有文件夹结构和文件: -

js
--src
  --sum.js
  --subtract.js
  --calculator.js
  --innerFolder
    --multiply.js
    --divide.js
--specs
  --sumSpec.js
  --subtractSpec.js
  --calculator.js
  --innerFolder
    --multiplySpec.js
    --divideSpec.js
Run Code Online (Sandbox Code Playgroud)

我解决这个问题的方法是观察src文件夹中的所有文件/文件夹:

watch:{
  src : {
    files: ['src/**/*.*'],
    tasks:  //create files and folders on specs folders here
}
Run Code Online (Sandbox Code Playgroud)

我遇到了grunt.file插件,并且还考虑了grunt-shell并制作了我自己的脚本来实现这一点.

但我想知道是否已经有一种更简单的方法来做到这一点.

Kyl*_*ung 5

尝试复制任务以及filter属性:

grunt.initConfig({
  copy: {
    js: {
      expand: true,
      cwd: 'js/src',
      src: '**/*.js',
      dest: 'js/specs',
      filter: function(filepath) {
        var path = require('path');
        var dest = path.join(
          grunt.config('copy.js.dest'),
          // Remove the parent 'js/src' from filepath
          filepath.split(path.sep).slice(2).join(path.sep)
        );
        return !(grunt.file.exists(dest));
      },
    },
  },
  watch: {
    js: {
      files: ['js/src/**/*.js'],
      tasks: ['copy:js'],
    },
  },
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以复制在编辑或运行时不存在的文件grunt copy:js.