将JSON文件从一个目录复制到另一个目录

时间:2015-08-05 11:28:49

标签: javascript gruntjs

在我的网页项目中,我有以下目录结构

|- target
|- foo
|- bar
|- baz

我正在尝试编写一个Grunt任务,它将所有JSON文件从名称与提供给构建的参数匹配的目录中复制到target目录中

grunt.registerTask('flavor', function(srcDir) {
  var from = './' + srcDir + '/*.json';
  var dest = './target/';

  grunt.file.expand(from).forEach(function(src) {
    grunt.file.copy(src, dest);
  });   
});

但是当我用

打电话时
grunt flavor:foo

我收到错误

  

警告:无法写入“./target/”文件(错误代码:EISDIR)。使用--force继续。

2 个答案:

答案 0 :(得分:1)

正如@DanielApt所提到的,你应该使用grunt-contrib-copy。要根据您对构建参数的评论得出答案,您可以通过grunt-option将其转到task

方式一:运行不同的目标

 grunt.initConfig({
    copy: {
        foo: {
            files: [
                {
                    'expand': 'true',
                    'cwd': 'foo/',
                    'src': [**],
                    'dest': 'dist/en'
                }
             ]
          },
        bar: {
            files: [/**/]
        },
        baz: {
            files: [/**/]
        }
    }
});

var target = grunt.option("target") || "foo";

grunt.registerTask("default", ["copy:" + target]);

// run with grunt --target=foo

方式2:带模板的Arbituary文件夹:

var target = grunt.option("target") || "foo";

grunt.initConfig({
    target: target,
    copy: {
        default_target: {
            files: [
                {
                    'expand': 'true',
                    'cwd': '<%= target %>/',
                    'src': [**],
                    'dest': 'dist/en'
                }
             ]
        },
    }
});

grunt.registerTask("default", ["copy"]);

// run with grunt --target=anyfolderhere

答案 1 :(得分:0)

你需要写自己的任务吗?如果你不这样做,我用grunt-contrib-copy实现了这个目标。

copy: {
            default: {
                files: [
                    {
                        expand: true,
                        src: ['foo/**', 'bar/**'],
                        dest: 'target/'
                    }
                ]
            }
        }