3

我刚刚从 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,我不会收到任何错误

4

5 回答 5

7

在我们的一些工作站上遇到类似问题后,我会说它绝对看起来像 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
于 2021-10-27T17:48:30.113 回答
3

切换到 Node 14.17、14.16 可能无法解决问题,因为新的基于 Apple M1 ARM 的 CPU 架构直到 Node v16 才出现在支持路径中。这是 M1/Apple Silicon/ARM 处理器的适当解决方案,来自已安装在工作站上的旧版 NodeJS w/ NVM。

// 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 时出现问题时所需的构建/运行时/依赖项升级/替换)。

于 2021-11-15T21:06:21.030 回答
0

我的项目没有在新的 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
于 2021-11-15T10:10:56.750 回答
0

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

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

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

安装对 M1 mac 具有本机支持的节点 v16 这
可能是您唯一需要做的事情......

但是我需要处理一些项目,每个人都在使用 node v14 和 npm v6
对我有用的是使用 node 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 的节点版本都会在本地编译并增加大约 10GB 的nvm缓存(https://github.com/nvm-sh/nvm/issues/2418

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

你可以nvm cache clear用来收回空间

安装节点 v14.17.4 后的 nvm 缓存

安装节点 v14.17.4 后的 nvm 缓存

于 2022-01-20T20:58:18.237 回答
0

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

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

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

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

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

于 2022-02-11T01:07:38.720 回答