运行不同的任务只与一个文件不同

时间:2014-04-14 07:48:08

标签: gruntjs

我有一个复杂的.grunt文件很多东西。其中包括concat。它以下列方式看待

concat: {
  libraries : {
    src : [many files],
    dest: 'libraries.js'
  },
  ... a lot of similar things,
  myCode : {
    src : [
      'config.js',               // this is the main problem
      ... a lot of files
    ],
    dest: 'myCode.js'
  },
}

所以主要问题是我有我的预生产环境和真实环境。我希望为每个配置包含不同的配置(让我们说config_dev.jsconfig_prod.js)。

我目前处理它的方法是创建不同的code_部分:

  myCode_prod : {
    src : [
      'config_prod.js',               // this is the main problem
      ... a lot of files
    ],
    dest: 'myCode.js'
  },
  myCode_dev : {
    src : [
      'config_dev.js',               // this is the main problem
      ... a lot of files
    ],
    dest: 'myCode.js'
  }

然后注册2个不同的任务:

grunt.registerTask('default', [
    // my other tasks
    'concat:libraries',
    'concat:otherthings',
    'concat:myCode_prod'
]);

grunt.registerTask('default', [
    // my other tasks
    'concat:libraries',
    'concat:otherthings',
    'concat:myCode_dev'
]);

它运行良好且正确,但问题是myCode_dev仅在一个文件和许多其他文件(例如20并且它们每周都在添加/更改)中有所不同。这就是问题所在:有时我会忘记包含/复制所有问题并开始解决问题。

那么有没有办法以不同的方式做到这一点?

P.S。我知道标题很糟糕,但找不到更好的标题。所以请按照你的意愿改变它。

1 个答案:

答案 0 :(得分:0)

我认为您需要的是尽早将devdist分开。在this project我有一个可能证明有用的类似方法。主要想法是注册两个任务并选择一个默认任务(您仍然需要查看包含devdist变体的任务 - 在这种情况下uglifycompass,要完全理解它:

// Compile production files
grunt.registerTask('dist', [
    'jshint',
    'jasmine',
    'uglify:dist',
    'compass:dist'
]);

// Compile developer friendly environment
grunt.registerTask('dev', [
    'jshint',
    'jasmine',
    'uglify:dev',
    'compass:dev'
]);

// Default task(s).
grunt.registerTask('default', 'dev');

最后一行意味着当您单独运行命令dev时,grunt默认运行。如果您想要用于制作,那么您必须具体,例如:grunt:dist

请注意,此项目以grunt watch为中心,我认为这是最佳工作流程。如果智能配置,watch任务将仅在被监视的文件发生更改时解析/编译某些文件。这样,仅对CSS个文件(仅javascript个文件)进行更改时,不会编译/连接/缩小javascript个文件。它就在那个项目中,随时可以探索它。干杯!