【问题标题】:Grunt - read json object from fileGrunt - 从文件中读取 json 对象
【发布时间】:2014-11-26 16:27:24
【问题描述】:

我想使用grunt-hash 插件来重命名我的 js 文件。 此插件创建一个包含重命名文件映射的新文件:

hash: {
    options: {
        mapping: 'examples/assets.json', //mapping file so your server can serve the right files

现在我需要通过替换所有用法(将“index.js”重命名为“index-{hash}.js”)来修复指向此文件的链接,因此我想使用grunt-text-replace 插件。 根据文档,我需要配置替换:

replace: {
  example: {
     replacements: [{
       from: 'Red', // string replacement
       to: 'Blue'
     }]
   }
}

如何读取 json 映射文件以获取每个文件的 {hash} 值并提供它们来替换任务?

【问题讨论】:

  • @Future reader:如果你只是想读入一个文件,使用grunt.file.read

标签: json gruntjs


【解决方案1】:
grunt.file.readJSON('your-file.json')

可能是您正在寻找的。​​p>

我设置了一个小测试。我有一个简单的 JSON 文件“mapping.json”,其中包含以下 JSON 对象:

{
  "mapping": [
    {"file": "foo.txt"},
    {"file": "bar.txt"}
  ]
}

在我的 Gruntfile.js 中,我编写了以下简单的测试任务,它读取“映射”数组中的第一个对象:

grunt.registerTask('doStuff', 'do some stuff.', function() {
  mapping = grunt.file.readJSON('mapping.json');
  grunt.log.write(mapping.mapping[0]["file"]).ok();
});

调用Grunt任务时,控制台输出如下:

$ grunt doStuff
Running "doStuff" task
foo.txtOK

Done, without errors.

我希望这会有所帮助! :)

【讨论】:

  • 是否可以提供mapping 变量来替换任务?或者提取到全局变量。
  • 我不确定我是否正确理解了替换任务,但是否可以从所述替换任务中读取 JSON 文件?
  • 我刚刚更新了我的问题。请查看替换任务的配置。
  • 老实说,这在我看来异常复杂且容易出错,您不同意吗? this blog post 中解释的解决方案怎么样?
  • 此解决方案中的所有文件都有一个哈希值。如果一个文件更改 - 您重置应用程序中的所有缓存。我想分别为每个文件创建哈希。有可能,但是如何设置指向此文件的链接?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2013-10-31
相关资源
最近更新 更多