10

我正在尝试管理我的节点包依赖项。我希望能够通过运行命令来安装所有必需的依赖项,并且根据我所阅读的内容,实现此目的的一种方法是使用package.json文件并运行npm install. 所以我的 JSON 文件如下所示:

{
 "name": "Name-Of-The-Thing",
 "description": "The Thing's Name",
 "author": "The Dude <the.dude@dudethinking.com>",
 "dependencies": {
      "mocha":">= 1.12.0",
      "mocha-phantomjs":">= 3.1.0",
      "chai":">= 1.7.2",
      "phantomjs":">= 1.9.1"
 }
}

但是npm install报告以下错误:

npm ERR! Failed to parse json
npm ERR! Unexpected token ?
npm ERR! File: C:\Path\To\The\Thing\package.json
npm ERR! Failed to parse package.json data.
npm ERR! package.json must be actual JSON, not just JavaScript.
npm ERR!
npm ERR! This is not a bug in npm.
npm ERR! Tell the package author to fix their package.json file. JSON.parse

npm ERR! System Windows_NT 6.2.9200
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "test"
npm ERR! cwd C:\Path\To\The\Thing
npm ERR! node -v v0.8.15
npm ERR! npm -v 1.1.66
npm ERR! file C:\Path\To\The\Thing\package.json
npm ERR! code EJSONPARSE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     C:\Path\To\The\Thing\npm-debug.log
npm ERR! not ok code 0

有谁知道为什么?

4

3 回答 3

13

正确答案:

您的编辑器将字节顺序标记添加到 JSON 文件,这会使八位字节流成为无效的 JSON 文本。

JSON RFC说:

JSON 文本应以 Unicode 编码。默认编码为 UTF-8。

由于 JSON 文本的前两个字符始终是 ASCII 字符 [RFC0020],因此可以确定八位字节流是 UTF-8、UTF-16(BE 或 LE)还是 UTF-32(BE 或 LE)通过查看前四个八位字节中的空值模式。

       00 00 00 xx  UTF-32BE
       00 xx 00 xx  UTF-16BE
       xx 00 00 00  UTF-32LE
       xx 00 xx 00  UTF-16LE
       xx xx xx xx  UTF-8

由于这个原因,您提到的错误报告已关闭。

据我了解,任何有效的 ASCII 编码文本也恰好是有效的 UTF-8,因此加上没有 BOM,它解释了为什么它现在可以按预期工作。

一般来说,我认为你应该设置你的文本编辑器以 UTF-8 保存文件,没有字节顺序标记。请参阅没有 BOM 的 UTF-8 和 UTF-8 有什么区别?供讨论。每Node.js 源代码需要什么编码?, Node.js 将接受以这种方式编码的 JS 源文件中的非 ASCII 字符。当您想在源代码中的某处嵌入非 ASCII 字符串时,这会很方便。

于 2013-07-31T09:44:37.877 回答
1

npm 错误!意外的标记 ?

如果没有 BOM,还要检查是否只有“?” 文件中的某处或其他错误,例如缺少或额外的“,”。

于 2014-07-28T09:42:45.543 回答
0

唯一的解决方案是指定依赖项的确切版本。NPM 有时无法识别 > 或 .x

于 2014-06-17T02:59:59.333 回答