【问题标题】:Zlib error when attempting to run npm install or yarn尝试运行 npm install 或 yarn 时出现 Zlib 错误
【发布时间】:2021-11-25 20:29:38
【问题描述】:

我刚刚从 GitHub 的库中提取了一些内容,我正在使用我的 windows 计算机在 VSCode 中进行编码。代码没有问题,尽管当我尝试运行 npm install 或 yarn install 来获取 node_modules 和 yarn.lock 时,我得到了一个奇怪的错误并且这些包不起作用。我使用 ZSH 作为我的 Mac 的终端。

这是错误输出:

niltonsf@Niltons-MacBook-Pro ignews.nosync % sudo yarn install
Password:
yarn install v1.22.15
[1/4] ????  Resolving packages...
[2/4] ????  Fetching packages...
error An unexpected error occurred: "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz: incorrect data check".
info If you think this is a bug, please open a bug report with the information provided in "/Users/niltonsf/Desktop/ignews.nosync/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
error https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz: incorrect data check
error https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.2.tgz: incorrect data check
niltonsf@Niltons-MacBook-Pro ignews.nosync % npm install
npm WARN deprecated @types/next-auth@3.15.0: This is a stub types definition. next-auth provides its own type definitions, so you do not need this installed.
npm WARN deprecated querystring@0.2.1: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated querystring@0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm ERR! code Z_DATA_ERROR
npm ERR! errno -3
npm ERR! zlib: incorrect data check

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/niltonsf/.npm/_logs/2021-10-05T15_44_51_340Z-debug.log
niltonsf@Niltons-MacBook-Pro ignews.nosync % 

我的 node、npm 和 yarn 的版本:

node: v14.18.0
npm: 6.14.15
yarn: 1.22.15
macos: Big Sur

我的尝试:

deleting the yarn.lock
running: npm cache verify and then npm cache clean --force

这是日志结果的结尾:

1165 verbose stack     at PassThrough.Writable.write (internal/streams/writable.js:303:10)
1165 verbose stack     at PassThrough.ondata (internal/streams/readable.js:731:22)
1165 verbose stack     at PassThrough.emit (events.js:400:28)
1166 verbose cwd /Users/niltonsf/Desktop/github.nosync/ignews
1167 verbose Darwin 20.6.0
1168 verbose argv "/usr/local/Cellar/node@14/14.18.0/bin/node" "/usr/local/opt/node@14/bin/npm" "install"
1169 verbose node v14.18.0
1170 verbose npm  v6.14.15
1171 error code Z_DATA_ERROR
1172 error errno -3
1173 error zlib: incorrect data check
1174 verbose exit [ -3, true ]

如果我在 Windows 计算机上运行 npm i 或 yarn,我不会收到任何错误

【问题讨论】:

标签: node.js npm zlib yarn-lock.json


【解决方案1】:

在我们的一些工作站上遇到类似问题后,我想说它绝对看起来像 m1 Mac 和/或 Big Sur 上的 Node 14.18.x 中的一个错误(即使 node 本身是为 x86_64 编译的) .我怀疑 zlib 库存在链接问题,但这是针对 Node 问题跟踪器的讨论...

所以这是我的建议:卸载 Node 14.18.x 并尝试改用 Node 14.17.x。

附带说明,您可能会发现首先安装nvm 很有用。 nvm 允许快速安装多个版本的 Node,并从一个版本切换到另一个版本。例如,您可能会这样做:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

nvm install 14.17
nvm alias default 14.17

npm install -g yarn
yarn

【讨论】:

【解决方案2】:

切换到 Node 14.17、14.16 可能对您不起作用,因为新的 Apple M1 基于 ARM 的 CPU 架构直到 Node v16 才进入支持路径。以下是 M1/Apple Silicon/ARM 处理器的合适解决方案,来自工作站上已安装 NVM 的旧版本 NodeJS。

// Clear your current local NVM cache.
nvm cache clear

// Download and install NodeJS version 16, later verify that the v16
// NodeJS API does not break your applications build/runtime. 
nvm install v16 && nvm use v16 && node --version

// While at your projects root (same level as package.json, node_modules, typically)
// remove all traces of ./node_modules from last version's NPM & Node cache and node_modules directory.
rm -rf ./node_modules && npm cache clean --force

// All prior dependencies are now removed, reinstall with new NodeJS/NPM versions.
npm i

// Start your app
npm start 

与往常一样,当您切换到带有 NVM 的新 NodeJS 版本时,使用 NPM 安装的任何全局模块都会被吹走。因此,请确保您的项目没有缺少任何必需的全局/系统 NodeJS 依赖项,安装在机器级别,这些依赖项可能会或可能不会作为依赖项或 dev-dependency 包含在项目的 package.json 文件中(@angular-cli, create-react-app、typescript、ts-node、express-generator、AWS-CLI 等)

如果由于不支持的依赖项而导致运行时错误,则从 v14->v16 的迁移中不推荐使用的 API 更改(您的 NodeJS 项目越大,与您的代码库相关的重大更改的可能性就越大)。如果在本地冒烟测试后它在 NodeJS v16 上看起来运行良好,并且这不是您的个人项目,那么与您的主管、经理或架构师讨论提出拉取请求并在完成后完成全面回归是明智的。更改已到位,因为这可能会导致回归以访问已弃用或不正确的签名以调用过时的 API。

警告:如果您收到有关找不到 NodeJS/NPM 的错误,请确保在下载和切换版本后重新加载您的 shell 环境,方法是手动或以编程方式退出和打开,具体取决于您的本地设置:

    // Bash with ~/.bash_profile for interactive shell
    source ~/.bash_profile

    // Bash reload from .bashrc non-interactive shell
    source ~/.bashrc

    // ZSH reload from .zshrc non-interactive shell
    source ~/.zshrc 

    // ZSH reload from ~/.zsh_profile for interactive shell
    source ~/.zsh_profile

    // Or just simply type the following into your shell, depending on which you are using.
    %> zsh
    #> sh 
    #> bash
 

**总结:目前推荐的做法是安装和使用推荐版本的NodeJS(v16),这是Apple M1 ARM CPU官方支持的版本。

这样可以测试所有内容,您和维护代码库的任何其他开发人员都可以充分利用 v16 中的所有新功能和修复,并通过强制他们运行 hacky 设置来防止浪费开发时间,尝试hacky 解决方法。 这样就可以彻底测试所有内容。

注意:最终,有人需要升级 NodeJS 运行时版本,以保持您的支持路径并使用现代依赖项、安全/性能修复、利用现代 API,并针对最新支持的 JavaScript 版本。 如果您正在与正在开发的开发人员团队合作 不同类型的工作站,那么这个问题就会吃掉 开发时间而研究(和来这个帖子或图 找出他们自己的解决方法,要么可能是危险的,并导致 不常见,难以跟踪/调试错误和不一致的开发 环境,而不仅仅是修复构建/运行时/依赖关系 如果迁移到 v16 时出现问题,则需要升级/更换)。

【讨论】:

    【解决方案3】:

    我的项目没有在新的 Node.js 上运行,但我在 M1 笔记本电脑上的 Node 14 上安装 deps 时也遇到了同样的问题。切换到 Node 14.17、14.16 没有帮助。

    这是我针对 m1 用户的解决方法:

    nvm use 16
    npm i --force
    nvm use 14
    npm run start // <- your app start command
    

    【讨论】:

      【解决方案4】:

      我开始在 M1 mac 上使用任何节点 v14 时遇到相同的错误

      npm ERR! code Z_DATA_ERROR
      npm ERR! errno -3
      npm ERR! zlib: incorrect data check
      

      尝试了很多东西,这对我有用:

      安装对 M1 mac 有原生支持的 node v16
      这可能是您唯一需要做的事情......

      但我需要处理一些项目,每个人都在使用 node v14 和 npm v6
      对我有用的是将节点 16 与降级的 npm 一起使用:

      1. 为此安装单独的节点版本:nvm install v16.13.1
      2. 切换到它并降级 npm:npm i -g npm@6.14.16
      3. 可选别名:nvm alias compat v16.13.1

      最后你应该有类似的东西:

      nvm use compat 
      Now using node v16.13.1 (npm v6.14.16)
      

      对我来说,v16 的唯一问题是它改变了旧项目的 package-lock.json 版本。


      我尝试过但不起作用

      没有运气的其他节点 v14 版本(同样的错误)

      • v14.17.4
      • v14.17.6
      • v14.18.2

      尝试在 v14 上升级 npm

      试图安装npm@6.14.16itelsef导致zlib错误

      npm doctor

      说一切都很好

      npm cache clean -f

      同样的错误

      转到一个新文件夹并开始一个新项目。

      安装一些包是可行的,但是尝试一个我在另一个项目中遇到zlib 错误的包在新项目中导致了同样的错误

      已删除node_modules

      同上。一些软件包设法安装但不是全部(zlib)


      有趣的事实:
      在 M1 mac 上安装任何低于 v16 的节点版本都会在本地编译,并为 nvm 缓存增加大约 10GB (https://github.com/nvm-sh/nvm/issues/2418)

      除非您计划删除和安装(完全相同)相同的节点版本,否则不会再次使用此缓存

      您可以使用nvm cache clear 收回空间

      安装node v14.17.4后的nvm缓存

      【讨论】:

        【解决方案5】:

        对于那些使用带有 m1 芯片的 macbook 的人,我遇到了这个问题,并尝试使用 nvm 安装以下节点版本,但错误仍然存​​在:

        • v14.5.5
        • v14.16.0
        • v14.16.1
        • 14.17.6

        我尝试清理缓存和这里提到的所有解决方案,我什至尝试了 node 和 npm 的不同组合但没有运气。

        为了解决这个问题,我必须运行命令来切换架构: arch -x86_64 zsh

        在那之后,我可以毫无问题地进行 npm install。

        【讨论】:

          猜你喜欢
          • 2023-02-04
          • 1970-01-01
          • 2020-02-20
          • 1970-01-01
          • 1970-01-01
          • 2022-01-12
          • 1970-01-01
          • 1970-01-01
          • 2021-12-16
          相关资源
          最近更新 更多