node.js - Synology 上的 npm install 给出 zlib 无效距离错误

标签 node.js synology

虽然这还不够理想,但我们目前正在通过 Synology 运行构建脚本。当然,构建的一部分是安装所有软件包。然而此时发生了很多错误。

我们安装使用:

npm ci --only=product (尽管与 npm install 的结果相同)。并且出现以下错误:

npm WARN tar zlib: invalid distance too far back

(就像很多很多次一样)在某处跟随:

291 verbose stack ZlibError: zlib: invalid distance too far back
291 verbose stack     at Unzip.write (/usr/local/lib/node_modules/npm/node_modules/minizlib/index.js:147:22)
291 verbose stack     at Unpack.write (/usr/local/lib/node_modules/npm/node_modules/tar/lib/parse.js:313:19)
291 verbose stack     at PassThrough.ondata (_stream_readable.js:727:22)
291 verbose stack     at PassThrough.emit (events.js:210:5)
291 verbose stack     at addChunk (_stream_readable.js:309:12)
291 verbose stack     at readableAddChunk (_stream_readable.js:290:11)
291 verbose stack     at PassThrough.Readable.push (_stream_readable.js:224:10)
291 verbose stack     at PassThrough.Transform.push (_stream_transform.js:150:32)
291 verbose stack     at PassThrough.afterTransform (_stream_transform.js:94:10)
291 verbose stack     at PassThrough._transform (_stream_passthrough.js:44:3)
291 verbose stack     at PassThrough.Transform._read (_stream_transform.js:189:10)
291 verbose stack     at PassThrough.Transform._write (_stream_transform.js:177:12)
291 verbose stack     at doWrite (_stream_writable.js:431:12)
291 verbose stack     at writeOrBuffer (_stream_writable.js:415:5)
291 verbose stack     at PassThrough.Writable.write (_stream_writable.js:305:11)
291 verbose stack     at PassThrough.ondata (_stream_readable.js:727:22)
292 verbose cwd /volume1/docker/builder/dockers/allsports.app/allsports.app.nginx/javascript
293 verbose Linux 3.10.105
294 verbose argv "/volume1/@appstore/Node.js_v12/usr/local/bin/node" "/usr/local/bin/npm" "ci"
295 verbose node v12.14.0
296 verbose npm  v6.13.4
297 error code Z_DATA_ERROR
298 error errno -3
299 error zlib: invalid distance too far back
300 verbose exit [ -3, true ]

从日志中可以看出,我的 Synology 使用的是 Node 12.14 和 npm 6.13。我已经在自己的电脑上使用完全相同的版本进行了测试,并且运行顺利。

是什么原因造成的?可以修复吗?

最佳答案

系统 Zlib 1.2.8(包含在 Synology 当前版本的 DSM 中)无法与 Node v12 或 v10 中的 npm 配合使用,如 https://github.com/nodejs/node/issues/22839#issuecomment-474484250 中所述。

Synology 早期版本的 Node(例如 v8)没有此问题,npm 可以正常工作。我刚刚在 Synology 上使用 Node v12 时遇到了这个错误(npm 无法做任何有用的事情),然后退回到 Node v8 确实可以解决问题。

一种选择可能是使用 Entware 从源代码构建更新的 zlib,但我了解到 Synology 支持甚至拒绝接触带有 ipkg/Optware/Entware 的系统。 changelog for Zlib表明 1.2.9 中进行了许多可移植性改进,但我不确定仅替换系统 zlib 是否会导致系统上其他软件出现问题。

总的来说,如果您的构建脚本可以处理 Node 8(不幸的是,它刚刚 EOL),我现在会坚持使用它。否则,官方/支持的答案可能是等待 Synology 的 DSM 更新。

关于node.js - Synology 上的 npm install 给出 zlib 无效距离错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60288671/

相关文章:

mysql - 容器 WordPress 关闭且没有错误消息(Docker、Bitnami、MySQL)

javascript - Synology SSO 服务器

android - Chromecast 在尝试播放来自 DS Video 的电影后重新启动

node.js - Nodejs 中的 Handlebars 助手不工作

javascript - 从 cmd 运行 gulp 可以,但在 WebStorm 中不行

javascript - 检查日期是否与重复日期匹配

linux - ffmpeg : Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, 速率、宽度或高度

linux - 如何通过 iPKG 在 Synology 上安装 Postgres

javascript - sailsjs 其中多对多关系包含

node.js - npm install 未获取软件包的最新次要版本