Search code examples
javascriptnode.jsgruntjsuglifyjs

How to minify a JSON text file with grunt?


I need to minify a set of JSON files (language files) with Grunt/grunt-contrib-uglify:

grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
        build: {
            src: 'src/main/app/resources/locales/*/*.json',
            dest: 'target/resources/locales/*/*.json'
        }
    }
});

What I'm getting is:

Files: src/main/app/resources/locales/en/messages.json -> target/*/*.json
Minifying with UglifyJS...Reading src/main/app/resources/locales/en/messages.json...OK
>> Uglifying source "src/main/app/resources/locales/en/messages.json" failed.
Warning: Uglification failed. Use --force to continue.

I'm starting to wonder, does uglify work on pure JSON files, or is it intended for JavaScript source files only? The JSON file is surely well formed, it runs in the application in its non-minimized form.


Solution

  • The grunt-json-minify (as indicated in user2806181's answer) works OK (thanks, by the way), but it only modifies files in place. Inspired by the answer, I've found one that's a bit more advanced: grunt-minjson:

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        minjson: {
            build: {
                files: { 
                    'target/locales/en/messages.json':
                        'resource/locales/en/messages.json'
                }
            }
        }
    });