在运行"bower install requirejs-text"时出现"EMALFORMED Failed to read bower.json"错误。

22
当我尝试安装 requirejs-text 时,出现了一个我不理解的错误。
$ bower install requirejs-text
bower                       EMALFORMED Failed to read /Users/bgolder/projects/explorer/front/bower.json

Additional error details:
Unexpected string

在bower.json文件中,我没有发现任何问题。

{
  "name": "front",
  "version": "0.0.0",
  "dependencies": {
    "bootstrap": "~3.1.1"
    "jquery": "~1.10.2",
    "requirejs": "~2.1.9",
    "requirejs-text": "~2.0.10",
    "underscore": "~1.5.2",
    "backbone": "~1.1.0",
    "modernizr": "~2.6.2"
  },
  "devDependencies": {},
}

如果我在bower上使用冗长选项,我会得到这个跟踪。

bower                       EMALFORMED Failed to read /Users/bgolder/projects/explorer/front/bower.json

Additional error details:
Unexpected string

Stack trace:
SyntaxError: Unexpected string
    at Object.parse (native)
    at /usr/local/lib/node_modules/bower/node_modules/bower-json/lib/json.js:41:29
    at fs.js:266:14
    at /usr/local/lib/node_modules/bower/node_modules/graceful-fs/graceful-fs.js:104:5
    at Object.oncomplete (fs.js:107:15)
From previous event:
    at readJson (/usr/local/lib/node_modules/bower/lib/util/readJson.js:17:6)
    at Project._readJson (/usr/local/lib/node_modules/bower/lib/core/Project.js:539:25)
    at Project._analyse (/usr/local/lib/node_modules/bower/lib/core/Project.js:445:14)
    at Project.install (/usr/local/lib/node_modules/bower/lib/core/Project.js:47:17)

Console trace:
Trace
    at StandardRenderer.error (/usr/local/lib/node_modules/bower/lib/renderers/StandardRenderer.js:74:17)
    at Logger.<anonymous> (/usr/local/lib/node_modules/bower/bin/bower:114:22)
    at Logger.EventEmitter.emit (events.js:95:17)
    at Logger.emit (/usr/local/lib/node_modules/bower/node_modules/bower-logger/lib/Logger.js:29:39)
    at /usr/local/lib/node_modules/bower/lib/commands/install.js:35:16
    at _rejected (/usr/local/lib/node_modules/bower/node_modules/q/q.js:797:24)
    at /usr/local/lib/node_modules/bower/node_modules/q/q.js:823:30
    at Promise.when (/usr/local/lib/node_modules/bower/node_modules/q/q.js:1035:31)
    at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/bower/node_modules/q/q.js:741:41)
    at /usr/local/lib/node_modules/bower/node_modules/q/q.js:557:44

System info:
Bower version: 1.3.1
Node version: 0.10.26
OS: Darwin 13.1.0 x64

这仍然没有解释出问题所在。

3个回答

31

你的JSON文件中有两个语法错误。第一个错误是在 "bootstrap": "~3.1.1" 后面缺少了一个逗号,。这就是导致你收到该错误消息的原因。下一行的字符串 "jquery" 也是不被期望的。我通过目视检查文件找到了这个错误。在JavaScript或JSON编辑器中加载它也会显示出来。

第二个错误是在 {} 后面多了一个逗号。JavaScript 解析器不会有问题,但 JSON 解析器会报错。我认为使用 JSON 编辑器也能发现这个问题。我通过依赖新错误消息并进行尝试和错误处理来发现这个问题。

以下是已修复的文件:

{
  "name": "front",
  "version": "0.0.0",
  "dependencies": {
    "bootstrap": "~3.1.1",
    "jquery": "~1.10.2",
    "requirejs": "~2.1.9",
    "requirejs-text": "~2.0.10",
    "underscore": "~1.5.2",
    "backbone": "~1.1.0",
    "modernizr": "~2.6.2"
  },
  "devDependencies": {}
}

谢谢。我简直不敢相信我没看到那个。 - BenjaminGolder
是的,如果你把代码行打乱了,就要小心处理。这种情况经常发生在我身上。 - jhohlfeld
我建议在遇到问题时使用网站http://jsonlint.com来检查您的JSON配置文件。 - James Hulse
对于所有使用Visual Studio的人,只需使用“unicode(UTF-8无签名) - 代码页65001”保存文件即可。这可以在文件菜单中的高级保存选项中更改。 - Arief Shah

12

[更新]

Louis的答案可能是正确的!我将我的答案保留作为参考,但它可能不适用于问答者的特定情况。

[初始回答]

你正在使用Windows,并且使用了一个在编辑bower.json文件时会添加BOM的文本编辑器。

然后,bower会因为无法读取它(EMALFORMED)而抱怨-如果不考虑问题所在,这是相当准确但并不真正有帮助的提示。

解决方案:从头开始使用一个没有问题的文本编辑器开始你的bower.json文件。

对于其他遇到类似情况的人,请参见这里这里

(这与requirejs-text无关-是你的bower.json文件格式错误)


1
仍然是非常好的答案,救了我一命。 - Ales Ruzicka

-1

我在我的解决方案中遇到了一个类似的错误,针对的是 .bower.json 文件。由于某种自动化过程,该文件的内容被删除了。我成功地删除了该文件,并从源代码控制中拉回了它,这解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接