使用Grunt设置基于环境的变量

时间:2013-08-27 23:12:51

标签: gruntjs

我正在查看grunt-string-replace来完成将文件中的变量更改为特定于环境的变量。但是,当我尝试运行下面的grunt脚本时,我收到此警告:“任务最小值:dev not found”。但在这段代码中,我已定义:

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']);

};

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

您是否阅读过本手册? 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']);
};

答案 1 :(得分:1)

认为你试图这样做,这个片段会把环境变量SOME_ENV放到grunt配置中,替换只是简单地让你在文件中做$ {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']);
};