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

时间:2013-10-18 07:41:26

标签: javascript node.js gruntjs yeoman

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

js
--src
  --sum.js
  --subtract.js
  --calculator.js
  --innerFolder
    --multiply.js
    --divide.js
--specs

所以从上面的文件夹结构我要做的就是在我的规范中创建所有文件夹结构和文件,如果目标文件夹上的文件尚不存在,则仅 < - strong>: - < / p>

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

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

watch:{
  src : {
    files: ['src/**/*.*'],
    tasks:  //create files and folders on specs folders here
}

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

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

1 个答案:

答案 0 :(得分:5)

尝试复制任务以及过滤器属性:

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'],
    },
  },
});

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