如何验证bower.json?

时间:2014-11-20 09:18:58

标签: json bower

我的bower.json文件出错了。

google已经发现这很常见,通常是因为不可打印的字符(由于使用了使用此类字符的编辑器)。

有没有办法从cli本地验证文件?

作为一个FYI,我的错误如下:

bower meltingpot#*          EMALFORMED Failed to read /tmp/james/bower/meltingpot-5659-xBMHsL/bower.json

Additional error details:
Unexpected token ]

我的bower.json文件的内容如下:

{
  "name": "meltingpot",
  "version": "0.0.1",
  "homepage": "https://github.com/jamesjenner/meltingpot",
  "authors": [
    "james-jenner <james.jenner@########.com>"
  ],
  "description": "HTML based application, websockets for comms and node.js for backend",
  "keywords": [
    "application",
    "websocket",
    "node"
  ],
  "license": "MIT",
  "ignore": [
    "**/.*",
    "Gruntfile.js",
    "application.js",
    "bower_components",
    "comms.js",
    "node_modules",
    "*.json",
    "panelHandler.js",
    "shared/panel.js",
    "test",
    "tests"
  ]
}

虽然如果有人能够指出问题的原因我感到高兴,但真正的问题是如何验证bower.json文件以检测并识别任何错误。优先考虑的是提供错误发生的地方。

:编辑:

我创建了一个快速脚本来读取凉亭文件,通过JSON解析数据,然后将结果字符串化。根据经验,如果json文件包含格式错误的json,那么我会收到一个异常。所以看起来问题不在于文件的格式,而在于内容。

我用来测试文件的代码:

var fs = require('fs');

var data;

try {
  data = fs.readFileSync('bower.json');
} catch (e) {
  if (e.code === 'ENOENT') {
    // ENOENT is file not found, that is okay, just means no records
  } else {
    // unknown error, lets throw
    throw e;
  }
}

var json = JSON.parse(data);
console.log(JSON.stringify(json, null, ' '));

:编辑:

我现在已经使用bower-json软件包进行了测试(感谢jayeff),并且仍然可以验证。使用的代码如下:

var bowerJson = require('bower-json');

// Can also be used by simply calling bowerJson()
bowerJson.read('./bower.json', function (err, json) {
    if (err) {
        console.error('There was an error reading the file');
        console.error(err.message);
        return;
    }

    console.log('JSON: ', json);

    try {
      bowerJson.validate(json);
    } catch (err) {
        console.error('There was an error validating the object');
        console.error(err.message);
    }
});

:编辑:

为了清楚解决方案(由下面的drorb提供),问题是我创建了一个标记,注意到额外的逗号,然后通过提交更改来修复逗号。对于凉亭而言,它正在采用最新的发布/标签,因此忽略了我的提交中的修复。

此外,虽然在git中您可以通过git -d <tag>删除版本,但是bower似乎接受了发布,而不是最新的标记(github如何使用版本存在复杂性)。在我的情况下,我删除了0.1.0,添加了0.0.1并且bower寄存器忽略了0.0.1。我被迫创建一个0.1.1标签(在提交bower.json文件中的更改后),然后我就可以注册了。

我现在发现你可以通过网站界面从github删除这些版本(参考Editing and Deleting Releases)。我能够整理我的版本,更新package.json,然后通过git tag <tag> -a -m "<desc>"git push --tags推送我想要的版本。现在bower info <mypackage>显示正确的信息。

我已经添加了上述内容,因为当我浏览其他有此问题的stackoverflow帖子时,我们没有讨论过这个问题。我希望上面的内容明确了标签和提交的问题,试图注册以及如何整理任何错误。

我还建议您阅读Creating and Maintaining your own Bower Package

2 个答案:

答案 0 :(得分:2)

问题不在于您发布的bower.json,我认为它是您在主分支中的基础。
问题是在0.1.0 tag中找到的文件版本 - 忽略列表中有一个不需要的com逗号:

  "ignore": [
    "**/.*",
    "Gruntfile.js",
    "application.js",
    "bower_components",
    "comms.js",
    "node_modules",
    "package.json",
    "panelHandler.js",
    "shared/panel.js",
    "test",
    "tests", << issue is here
  ]

针对此文件运行测试代码会产生正确的错误消息:

undefined:27
  ]
  ^
SyntaxError: Unexpected token ]
    at Object.parse (native)
    at Object.<anonymous> (D:\work\js\meltingpot\test.js:16:17)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

答案 1 :(得分:0)

您可以在bower-json的帮助下检查您的bower.json是否符合规范。

code for bower-json位于主要的凉亭库中。