2017-07-18 156 views
0

GruntJS生成我的CSS + JS後,我希望它將生成的文件複製到服務器上的相應位置,因此我設置了不同的grunt-copy任務所以。該路徑複製到開發和生產環境是不同的:Grunt手錶在不同環境下觸發不同任務

 devjs: { 
      src: paths.dest + '/assets/prod.min.js', 
      dest: '/srv/www/dev/js/prod.min.js' 
     }, 
     prodjs: { 
      src: paths.dest + '/assets/prod.min.js', 
      dest: '/srv/www/htdocs/js/prod.min.js' 
     }, 

我怎樣才能得到grunt watch知道它在哪種環境,因此觸發該環境選擇適當的咕嚕副本任務?我是否需要有一個配置文件不在git倉庫中進行跟蹤或者定義環境的東西,還是有更好的方法來實現?

目前我的grunt-contrib-watch.js有以下幾種,但我希望它只是複製:devjs或copy:prodjs取決於環境。

 js: { 
      files: [ 
       paths.assets + '/**/*.js', 
      ], 
      tasks: ['js', 'copy:devjs', 'copy:prodjs'] 
     }, 

任何想法?謝謝!

回答

0

我選擇了使用命令行選項。所以我會使用例如grunt watch --enviro=prod在命令行(和cron)上,然後在grunt-contrib-watch.js中有這個:

module.exports = function(grunt) { 

    var paths = grunt.config.get('paths'); 

    if (grunt.option("enviro") === 'prod') { 
     var jsprocess = ['js', 'copy:prodjs']; 
    } else if (grunt.option("enviro") === 'dev') { 
     var jsprocess = ['js', 'copy:devjs']; 
    } else { 
     var jsprocess = ['js']; 
    } 

    grunt.config.set(
     'watch', 
     { 
      options: { 
       expand: true 
      }, 
      css: { 
       files: [ 
        paths.assets + '/**/*.*ss', 
       ], 
       tasks: cssprocess 
      },... 
1

我該如何讓grunt手錶知道它在哪個環境?

最佳做法是定義一個NODE_ENV環境變量來區分環境。然後,您可以使用process.env.NODE_ENV的一些子句來註冊不同的任務。
然後,您可以使用不同的配置運行相同的任務名稱。
例如:

if(process.env.NODE_ENV === 'prod') 
    grunt.registerTask('mytask', ['watch:prodjs']); 
else 
    grunt.registerTask('mytask', ['watch:devjs']); 

一種不同的方法(在我看來一個更好的),是剛剛註冊每個環境不同的任務。
這種方式更明確,因此更安全。

grunt.registerTask('prod-task', ['watch:prodjs', 'some-other:prodtask']); 
grunt.registerTask('dev-task', ['watch:devjs', 'some-other:devtask']); 

然後,你可以運行任何你需要爲你的環境任務。

grunt prod-task