2013-08-27 59 views
1

我正在尋找grunt-string-replace來完成將我的文件中變化的變量實現爲特定於環境的變量。但是,當我嘗試運行下面的grunt腳本時,出現此警告:「Task min:dev not found」。但在這段代碼中,我定義了:使用Grunt設置基於環境的變量

module.exports = function (grunt) { 
    // Project configuration. 
    grunt.initConfig({ 
     min: { 
      dev: { 
       "string-replace": { 
        dist: { 
         files: { 
          "/newrelic.js": "/newrelic.js" 
         }, 
         options: { 
          replacements: [ 
           { 
            pattern: /$APPNAME/ig, 
            replacement: "services" 
           }, 
           { 
            pattern: /$ENV/ig, 
            replacement: "nonprod" 
           } 
          ] 
         } 
        } 
       } 
      }, 
      prod: { 
       pkg: grunt.file.readJSON('package.json'), 
       uglify: { 
        options: { 
         banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' 
        }, 
        build: { 
         src: 'src/<%= pkg.name %>.js', 
         dest: 'build/<%= pkg.name %>.min.js' 
        } 
       } 
      } 
     } 
    }); 

// Load the plugin that provides the "uglify" task. 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-string-replace'); 

// Default task(s). 
    grunt.registerTask('default', ['min:dev']); 
    grunt.registerTask('prod', ['min:prod']); 

}; 

我是否錯過了什麼?

回答

1

你看過手冊嗎? getting started guide指出,任務期望它們的配置爲,其在同名的屬性中指定。你沒有'min'任務定義,因此它是錯誤的。

配置對象的頂級密鑰需要與任務名稱匹配,然後在任務配置中定義'目標'(例如'dev'或'prod')。

所以,這是你的Gruntfile重新工作。我還沒有測試,所以我不能保證它會工作,但它肯定會導致你在正確的方向:

module.exports = function (grunt) { 

    // Project configuration. 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     "string-replace": {     
      dev: { 
       files: { 
        "/newrelic.js": "/newrelic.js" 
       }, 
       options: { 
        replacements: [{ 
         pattern: /$APPNAME/ig, 
         replacement: "services" 
        }, { 
         pattern: /$ENV/ig, 
         replacement: "nonprod" 
        }] 
       } 
      } 
     }, 
     uglify: { 
      prod: { 
       options: { 
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' 
       }, 
       build: { 
        src: 'src/<%= pkg.name %>.js', 
        dest: 'build/<%= pkg.name %>.min.js' 
       } 
      } 
     } 
    }); 

    // Load the plugin that provides the "uglify" task. 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 
    grunt.loadNpmTasks('grunt-string-replace'); 

    // Default task(s). 
    grunt.registerTask('default', ['string-replace:dev']); 
    grunt.registerTask('prod', ['uglify:prod']); 
}; 
+0

是的,我沒有,但我也看了這對我的使用情況下,更具體的東西:HTTP ://stackoverflow.com/questions/13800205/alternate-grunt-js-tasks-for-dev-prod-environments。那麼這個工作如何進行並提高了15倍? – occasl

+0

該線程中的作者提到他們正在使用min *任務*。你沒有使用最小任務。 – badsyntax

1

認爲你試圖做到這一點,這片段將會把環境變量SOME_ENV,成繁重的配置中,取而代之的是簡單地給你一個簡單的方法在文件$ {SOME_ENV}佔位符替換

module.exports = function(grunt) { 
    // Project configuration. 
    grunt.initConfig({ 
     pkg : grunt.file.readJSON('package.json'), 
     SOME_ENV: process.env.SOME_ENV, 
     copy: { 
      files: [ 
       {expand: true, cwd: "src/", src: ["*.*", "**/*.*"], dest: "./build",} 
      ], 
      options: { 
      // Replace ${MEH} in files with grunt.config.get("MEH"), 
      // eg ${SOME_ENV} 
      // == grunt.config.get("SOME_ENV") 
      // == process.env.SOME_ENV == systems SOME_ENV environment var 
       process: function (content, srcpath) { 
        return content.replace(
         /\$\{([a-zA-Z.]+)\}/g, 
         function replacer(match, p1, offset, string){ 
          var value = grunt.config.get(p1); 
          grunt.log.write(" in file '" + srcpath + "'\n replacing '" + match + "'\n with '" + value + "'\n"); 
          return value; 
         }); 
        } 
      }, 
     } 
    }); 

    // Production Build Tools 
    grunt.loadNpmTasks('grunt-contrib-copy'); 

    // Default Production Build task(s). 
    grunt.registerTask('default', ['copy']); 
};