我的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帖子时,我们没有讨论过这个问题。我希望上面的内容明确了标签和提交的问题,试图注册以及如何整理任何错误。
答案 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位于主要的凉亭库中。