package.json文件在一段时间后被损坏

我使用Windows 10的企业计算机。我有nodejs v6.10.0和npm v3.10.10。 这是我第一次在这台电脑上安装nodejs / npm。

当我安装一个模块(任何types的模块,例如npm install jsdoc ),那么一切工作正常。 我可以多次调用我的example.js ,并且都可以。

但过了一段时间(随机期间),我不能再运行我的程序,因为我得到了下面的错误:

 >node example.js module.js:96 throw e; ^ SyntaxError: Error parsing C:\my_path\node_modules\some_module\package.json: Unexpected token x in JSON at position 0 

如果我用SublimeText检查package.json的内容,我得到:

 78c0 b658 72a3 e0f5 7832 e7d4 b5ee dcc8 8f00 9951 3b8a cbd5 db7f 4556 5e8b e88d 087d 9bb8 ff15 9acb 0a09 7aaf afd3 ced2 3aa9 e2c5 7e7b c4a1 7b82 a332 2848 83ed adca d7e8 3228 5537 64eb 3105 2338 6ae2 [...] 

而实际上,这是所有在这个项目的node_modules下的package.json文件,已经被损坏了….对于所有的模块!

但是,如果我在我的项目文件夹中有一个package.json ,它不会受到影响,只有在node_modules文件夹下的那些将是….

要解决这个问题,我必须删除node_modules并用npm install重新安装我的模块。 不太方便。 做完之后,我的package.json文件再一次和预期的内容一样正确。

我认为这可能与我们的McAfee防病毒有关,但为什么它只会影响node_modules下的package.json文件,而不会影响其他文件夹中的package.json文件?

我读了一个地方公司的代理可以用错误的编码下载一个package.json ,但是当我安装我的模块时, package.json是完全正常的。

所以如果有人有任何想法/主angular,我会感激!

编辑 :腐败停止发生自npm(5.x)的最后一个版本…我不知道它是否与它有关,或者可能安装了Windows更新,或我的I / T部门推送软件更新。 ..

在这个阶段,如果是我,我会使用SysInternals 进程监视器 :不要专门做任何事情,只是监视和logging系统上的所有I / O,直到有问题的文件开始改变。 您可以将Process Monitor设置为logging磁盘操作,然后过滤日志,直到看到名称中的.json实际上正在更改哪个进程。 可能会有很多日志,你可能需要花一段时间来筛选它们,但至less应该给你一些东西来看看,至less回答“什么程序正在改变这些文件?”的问题。 而不必猜测。

另一个想法是:如果文件正在改变,并且进程监视器根本不显示任何内容,则可能是磁盘损坏。 考虑一下在USB驱动器上做所有的工作,看看是否有相同的结果。 如果驱动器C:上的文件被损坏,而驱动器F:上没有(或其他),这可能表明您的磁盘开始失败。 特别是对于SSD,磁盘开始死的时候可以做一些奇怪的事情。

跟踪这些随机文件的变化可能很难,但有办法可以找出原因; 不要放弃希望,你会find它。 祝你好运!

我没有一个具体的修补程序来尝试,但有几个一般的可能会让你在那里:

  1. 卸载/重新安装node&npm – 显然,如果可能的话,你总是会尝试第一件事。

  2. 关掉所有不需要的服务/后台应用程序(特别是扫描仪),看看问题是否停止。 如果是这样,请在testing的同时缩小范围并逐个打开服务。 也许让一个脚本运行你的应用足够多的时间,通常会产生错误。

  3. 有没有保存的构build工具正在运行? 吞咽/咕噜? 这也可能是罪魁祸首。

我猜如果你尝试前两个build议,你会发现你的问题。

另外,您提到的只读内容很奇怪,但是您确定是否有适当的策略来允许您设置这些权限? Windows有时候会让你感到困惑,因为你可以改变权限,有时候看起来好像事情一切正常,但是事实并非如此,只有在事情还没有起作用的时候,你才会注意到,你又回过头去检查权限了。

这很奇怪。 与恶意软件无关的唯一原因可能是导致编码问题。 唯一有效的JSON编码是UTF-8,UTF-16和UTF-32(都是小字节和大字节),但package.json的最安全编码绝对是UTF-8(不含BOM)。

确保你永远不要在某个编辑器中打开它,并将它保存为UTF-8以外的其他内容。

唯一的其他原因是腐败可能确实是一些恶意软件。

有关JSON和字符编码的更多信息,请参阅这些答案:

  • JSON BOM /字符集编码的规范和用法
  • 没有BOM的UTF-8和UTF-8有什么区别?
  • 节点js语法错误意外的令牌?

如果下载之后一切正常,那么可能的解决方法是在成功安装之后使每个package.json文件为只读,并查看何时会看到某个不能写入的错误。

另一件事,我会看看,如果它发生在每个目录或可能只有一些目录,您正在共享或同步或在networking装入设备。