1

我正在查看 grunt-string-replace 以完成将文件中的变量更改为特定于环境的变量。但是,当我尝试运行下面的 grunt 脚本时,会收到以下警告:“Task min: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']);

};

我错过了什么吗?

4

2 回答 2

3

你读过说明书吗?入门指南指出,任务期望在同名属性中指定其配置。您没有定义“最小”任务,因此它出错了。

配置对象的顶级键需要与任务名称匹配,然后您在任务配置中定义“目标”(例如,“开发”或“产品”)。

所以,这是你重新设计的 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']);
};
于 2013-08-28T08:09:12.183 回答
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']);
};
于 2014-02-13T13:06:29.190 回答