【问题标题】:Grunt watch to fire different tasks in different environmentsGrunt watch 在不同的环境中触发不同的任务
【发布时间】:2017-12-23 15:55:45
【问题描述】:

在 GruntJS 生成我的 CSS+JS 之后,我希望它将生成的文件复制到服务器上的适当位置,因此我设置了不同的 grunt-copy 任务来执行此操作。开发环境和生产环境的复制路径不同:

        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 知道它在哪个环境中,然后为那个环境触发适当的 grunt-copy 任务?我是否需要在 git repo 中未跟踪的配置文件或定义环境的文件,或者有更好的方法吗?

目前我的grunt-contrib-watch.js 有以下内容,尽管我希望它只触发 copy:devjs 或 copy:prodjs,具体取决于环境。

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

有什么想法吗?谢谢!

【问题讨论】:

    标签: gruntjs grunt-contrib-watch grunt-contrib-copy


    【解决方案1】:

    如何让 grunt watch 知道它在哪个环境中?

    最佳实践是定义一个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
    

    【讨论】:

      【解决方案2】:

      我选择为此使用命令行选项。所以我会使用例如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
                  },...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多