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

标签 json node.js npm module

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

当我安装一个模块(任何类型的模块,例如 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 完全正常。

因此,如果有人有任何想法/领导,我将不胜感激!

编辑: 自上次发布 npm (5.x) 以来,损坏停止发生……我不知道它是否与它有关,或者可能安装了 Windows 更新,或者我的 I/T 部门推送了软件更新……

最佳答案

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

另一种想法:如果文件正在更改并且进程监视器显示任何内容,则可能是磁盘坏了。考虑在 USB 驱动器上完成所有工作一段时间,看看是否会发生相同的结果;如果驱动器 C: 上的文件损坏但驱动器 F: (或其他)上的文件未损坏,则可能表明您的磁盘开始出现故障。特别是对于 SSD,磁盘在开始死机时会做一些奇怪的事情。

跟踪此类随机文件更改可能很困难,但您可以通过多种方式确定原因;不要放弃希望,你会找到的。祝你好运!

关于json - package.json 文件在一段时间后损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42791706/

相关文章:

node.js - 为什么 npm install 在 git bash 上不起作用

json - 使用customResource将RDS层注册到opsworks堆栈

arrays - 解析多个 JSON 对象

node.js - 如何使用无服务器添加 AWS 用户权限?

javascript - 如何在 NodeJs 中更改 package.json 中的主文件

node.js - 命令行无法识别 Node-sass

node.js - Node/无未发布的导入 : "chai" is not published

c# - 使用自定义 Json 序列化器创建集合

java - 使用 Jackson 将默认序列化器应用于自定义序列化器中的属性

javascript - 如何从 Express.js 发布到 api