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

説明書は読みましたか?入門ガイドでは、タスクは構成が同じ名前のプロパティで指定されることを想定していると述べています。「最小」タスクが定義されていないため、エラーが発生しています。

構成オブジェクトの最上位キーはタスク名と一致する必要があり、タスク構成内で「ターゲット」(「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']);
};
于 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 に答える