2013-10-18 174 views
4

我试图自动执行我的测试,并且想要为src文件夹上创建的任何javascript自动创建测试文件。这是我的文件夹结构的细分。当grunt中不存在文件/文件夹时创建文件/文件夹

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

所以从上面的文件夹结构,我想要做的就是创建所有的文件夹结构,并在我的规格文件,这样才如果在目标文件夹中的文件不存在: -

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 
} 

我碰到0123来了插件,也考虑了grunt-shell并制作我自己的脚本来实现这一点。

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

回答

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不存在的文件。

+0

由于某些原因,即使dest目录为空,过滤器!grunt.file.exists(filepath)始终返回true。 – shriek

+0

grunt.file.exists只是检查文件或目录是否存在,而不是它是否为空。 –

+0

对不起,我的意思是grunt.file.exists(filepath)总是返回true,这导致!grunt.file.exists每次都是false,这就是为什么没有文件被复制。 – shriek

相关问题