今天,我把node_modules删除掉,然后重新npm run install 的时候出现了如下错误:

npm ERR! Unexpected end of JSON input while parsing near '...l.com"}],"directories'

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/louyanping/.npm/_logs/2018-12-14T03_32_00_994Z-debug.log
louyanpingdeMacBook-Pro:cnpc_group_buying louyanping$

记得这个错误以前也出现过,然后去搜索了一番,找到了解决方案,就是执行npm cache clean --force(有些人这样还是没有用的话,删除package-lock.json再重新尝试一下即可。)

那么问题来了,为什么会出现这样的问题呢?

可以先看下npm install的执行过程:

  1. 发出npm install命令
  2. npm 向 registry 查询模块压缩包的网址
  3. 下载压缩包,存放在~/.npm(本地NPM缓存路径)目录
  4. 解压压缩包到当前项目的node_modules目录

实际上说一个模块安装以后,本地其实保存了两份。一份是 ~/.npm 目录下的压缩包,另一份是 node_modules 目录下解压后的代码。但是,运行 npm install 的时候,只会检查 node_modules 目录,而不会检查 ~/.npm 目录。如果一个模块在 ~./npm 下有压缩包,但是没有安装在 node_modules 目录中,npm 依然会从远程仓库下载一次新的压缩包。

我们想利用已经在缓存中之前已经备份的模块实现离线模块安装的的 cache 机制已经在V5的时候重写了,缓存将由 npm 来全局维护不再需要开发人员操心,离线安装时将不再尝试连接网络,而是降级尝试从缓存中读取,或直接失败。就是如果你 offline ,npm将无缝地使用您的缓存。

但是呢,其实看完这些我还是一脸懵逼。。。。还是查了一些资料,但是也只能查到说:
这是一个与npm缓存腐败的问题。尽管在较新版本的npm中他们实现了自我修复,这通常可以保证没有腐败,但似乎并不那么有效。
在这里插入图片描述
Forcing clean cache 可以解决这种类似的问题.

解析其中一个json格式的缓存文件时发生错误。缓存在~/.npm/_cacache (in linux) 和 %AppData%/npm-cache (windows)中找到。PS:对于我当前的npm版本,当我检查时,有3个目录。在这里插入图片描述

如果继续查看第一个或第二个文件,结构如下所示:
在这里插入图片描述

每个缓存文件都有json格式
在这里插入图片描述

也就猜测或许这些文件在缓存重新install的时候出错了,也就是所谓的缓存腐败问题。(欢迎指正,根据资料实在找不到确切具体原因!)

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐