在 Synology 上安装 npm 给出了 zlib 无效距离错误

pau*_*l23 5 node.js synology

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

我们安装使用:

npm ci --only=production(虽然与 相同的结果npm install)。并出现以下错误:

npm WARN tar zlib: invalid distance too far back
Run Code Online (Sandbox Code Playgroud)

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

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 ]
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*sen 7

https://github.com/nodejs/node/issues/22839#issuecomment所述,系统 Zlib 1.2.8(包含在 Synology 当前版本的 DSM 中)不适用于 Node v12 或 v10 中的 npm 474484250

Synology 早期版本的 Node(例如 v8)没有这个问题,npm 正常工作。我刚刚遇到了这个错误(npm什么也做不了Synology 上使用 Node v12有用的),并且退回到 Node v8 确实使问题消失了。

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

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