我可以使用grunt在json文件中设置属性值吗?

时间:2016-08-08 13:18:43

标签: javascript json gruntjs

仍在学习咕噜咕噜的绳索,无法找到解决方案。 我有一个配置文件,比如说带有一些数据的config.json。

当我运行特定的grunt任务时,我想在config.json文件中增加一个值。我已经能够找到很多关于如何读取文件的信息,但到目前为止没有任何关于更改值的信息。

感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用https://github.com/eruizdechavez/grunt-string-replace替换字符串并保存文件

'string-replace': {
  dist: {
    files: {
      'dest/': 'src/**',
      'prod/': ['src/*.js', 'src/*.css'],
    },
    options: {
      replacements: [{
        pattern: /\/(asdf|qwer)\//ig,
        replacement: '"$1"'
      }, {
        pattern: ',',
        replacement: ';'
      }]
    }
  }
}

使用这个grunt插件你可以用替换

替换正则表达式模式(或简单的字符串)

制作最终json的步骤是:

  • 加载json文件>> http://gruntjs.com/api/grunt.file
  • 应用替换任务>>在顶部
  • 保存json文件>> grunt.file.write(filepath,contents [,options])

答案 1 :(得分:1)

我找到了一个基于giammangiato答案的解决方案。

我读了JSON文件,做了我的更改,然后通过使用修改后的JSON编写一个新文件来替换整个文件,如下所示:

var mrJSON = grunt.file.readJSON('myDir/config.json');

    var mrNumber  = mrJSON.number;

    mrNumber++;


    grunt.file.write('myDir/config.json', JSON.stringify(mrJSON));

答案 2 :(得分:0)

这是使用grunt任务更新package.json文件版本的示例。 (从0.0.0到1.0.0到2.0.0);

module.exports = function(grunt) {
    grunt.registerTask('version', function(key, value) {
        var projectFile = "package.json";
        if (!grunt.file.exists(projectFile)) {
            grunt.log.error("file " + projectFile + " not found");
            return true; //return false to abort the execution
        }
        var project = grunt.file.readJSON(projectFile), //get file as json object
            currentVersion = project["version"].split('.');

        currentVersion[lastIndex] = Number(currentVersion[0]) + 1
        currentVersion = currentVersion.join('.');

        project["version"] = currentVersion;
        grunt.file.write(projectFile, JSON.stringify(project, null, 2));
    });
}

现在您可以通过编写

来调用任务版本来增加文件
grunt version

或者您可以将其添加到生产过程中,例如:

module.exports = function(grunt) {
    grunt.registerTask('buildProd', [
      'version'
    ]);
};