npm安装无法读取package.json

npm安装无法读取package.json,npm,package-managers,Npm,Package Managers,我正在尝试管理我的节点包依赖项。我希望能够通过运行一个命令来安装所有必需的依赖项,根据我所阅读的内容,实现这一点的一种方法是使用package.json文件并运行npm install。因此,我的JSON文件如下所示: { "name": "Name-Of-The-Thing", "description": "The Thing's Name", "author": "The Dude <the.dude@dudethinking.com>", "dependencies"

我正在尝试管理我的节点包依赖项。我希望能够通过运行一个命令来安装所有必需的依赖项,根据我所阅读的内容,实现这一点的一种方法是使用
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"
 }
}
有人知道为什么吗?

正确答案:

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

说:

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格式保存文件,而不使用字节顺序标记。请参阅以进行讨论。根据,Node.js将接受以这种方式编码的js源文件中的非ASCII字符。当您希望在源代码中的某个位置嵌入非ASCII字符串时,这非常方便。

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

npm错误!意外的代币


如果没有BOM表,还要检查文件中是否有“?”或其他错误,例如缺少或附加“,”

这个特定的package.json对我来说很好。@MerynStol这太棒了。很高兴知道事情真的这么简单。也许这是一个平台问题。我在Windows 8上运行该命令,一个64位体系结构如果出现“意外令牌?”错误,可能json文件中有一些奇怪的(不可见的)字符。也许可以尝试不同的文本编辑器,或者修改编辑器的设置。然后重新保存package.json文件。我会在任何地方使用UTF-8。@MerynStol谢谢你的想法,它启发了我!该文件已编码为UTF-8,但该错误消息使我产生怀疑,因此我将其编码为ASCII(即删除BOM),效果非常好!谢谢事实上,这里有一个问题的错误报告ASCII是UTF-8的一个子集,当您开始使用出现在亚洲字符集中的重音字符或表意文字(字符代码255以上的任何字符)时,省略BOM只会导致问题。我想理想的解决方案是让我的编辑器支持JSON规范用于识别文件的特定编码,并激活基于.JSON文件扩展名的检测机制,遗憾的是,Visual Studio团队似乎还没有考虑到这一点(我怀疑他们是否会这样做)@Ceilingfish可能是发布在这里的解决方案之一?天知道为什么,但就我而言,当我用BOM保存时,它起了作用。否则,它无法解析JSON。我正在使用升华文本2。
       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