2014-11-20 3 views
2

У меня есть ошибка с моим файлом bower.json.Как проверить 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 <[email protected]########.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, а затем stringify результат. Из опыта, если в json-файле содержался некорректный json, я бы получил исключение. Таким образом, похоже, проблема связана не с форматом файла, а с содержимым.

Code I используется для проверки файла:

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, и регистр колокольчика проигнорировал 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.

+0

Возможно, обновите заголовок и тело этого вопроса, чтобы он не ошибочно отображался в поиске Google для людей, пытающихся проверить их bower.json. –

ответ

2

Проблема не в том, что вы дали сообщение bower.json, которое, как я полагаю, есть у вас в главной ветке.
вопроса является версией файла, найденным в 0.1.0 tag - есть מ ненужная запятая в списке игнорируемого:

"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

Ах, вы должны шутить! Я видел, как другие люди совершают ту же ошибку, и я думал, что я буду использовать последнюю фиксацию. используйте последний тег, а не последнюю фиксацию? Ах нашел ответ на http://bob.yexley.net/creating-and-maintaining-your-own-bower-package/ в разделе обслуживания. Версия в беседке. json - это то, что используется против тега для репозитория git. Спасибо drorb! Мне кажется, что такой dofus Oo – Metalskin

0

Вы можете проверить, соответствует ли ваш bower.json спецификациями с помощью bower-json.

code for bower-json находится в главном репозитории.

+0

Спасибо jeyeff, я только что наткнулся на это, прочитав код колокольчика. Просто попробовал и не повезло. JSON проверяет штраф. Ошибка должна исходить из логики бесед. :( – Metalskin

+0

Возможно, что-то не так с файлом tmp. – jayeff

+0

ссылка мертва –

Смежные вопросы