{"id":503192,"date":"2026-11-14T10:59:15","date_gmt":"2026-11-14T07:59:15","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=503192"},"modified":"2026-11-14T10:59:15","modified_gmt":"2026-11-14T07:59:15","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=503192","title":{"rendered":"Node.js 26 \u0441\u0442\u0430\u043b LTS: \u043f\u044f\u0442\u044c \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u0441 24 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u0438 \u043a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0438\u0445 \u0437\u0430\u0440\u0430\u043d\u0435\u0435"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>28 \u043e\u043a\u0442\u044f\u0431\u0440\u044f Node.js 26 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0442\u0430\u0442\u0443\u0441 LTS \u0441 \u043a\u043e\u0434\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c Lithium, \u0430 \u0432 \u043d\u043e\u044f\u0431\u0440\u0435 \u0432\u044b\u0448\u0435\u043b \u043f\u0435\u0440\u0432\u044b\u0439 security-\u0440\u0435\u043b\u0438\u0437 \u044d\u0442\u043e\u0439 \u0432\u0435\u0442\u043a\u0438, 26.13.1. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c 26 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 22 \u0438\u043b\u0438 24.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 LTS \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0438\u0445\u043e: \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0432\u0435\u0440\u0441\u0438\u044e \u0432 <code>.nvmrc<\/code> \u0438 Dockerfile, \u043f\u0440\u043e\u0433\u043d\u0430\u043b \u0442\u0435\u0441\u0442\u044b, \u043f\u043e\u0435\u0445\u0430\u043b\u0438. \u0422\u0443\u0442 \u0442\u043e\u0436\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u0430\u043a, \u043d\u043e \u0432 26 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0445 API, \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 ABI \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0434\u043b\u044f Linux \u043d\u0430\u0447\u0430\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0432 \u00ab\u0442\u043e\u043d\u043a\u0438\u0445\u00bb \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u0430\u0445. \u041b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043d\u0435 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435, \u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432 Dockerfile, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u0442.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u00ab\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2192 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u2192 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2192 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u00bb. \u0412\u0441\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043d\u0430 Node.js 22.23.5, 24.22.3 \u0438 26.13.1 (\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 linux-x64).<\/p>\n<h3>\u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c<\/h3>\n<p>\u0418\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 26.0.0 \u0438 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u043a LTS-\u0440\u0435\u043b\u0438\u0437\u0443 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0432\u0430\u0436\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u0443\u043d\u043a\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><code>http.ServerResponse.prototype.writeHeader()<\/code> \u0443\u0434\u0430\u043b\u0451\u043d \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>writeHead()<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 <code>_stream_readable<\/code>, <code>_stream_writable<\/code>, <code>_stream_duplex<\/code>, <code>_stream_transform<\/code>, <code>_stream_passthrough<\/code> \u0438 <code>_stream_wrap<\/code> \u0443\u0434\u0430\u043b\u0435\u043d\u044b;<\/p>\n<\/li>\n<li>\n<p><code>module.register()<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 <code>module.registerHooks()<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0444\u043b\u0430\u0433 <code>--experimental-transform-types<\/code> \u0443\u0434\u0430\u043b\u0451\u043d;<\/p>\n<\/li>\n<li>\n<p><code>NODE_MODULE_VERSION<\/code> \u043f\u043e\u0434\u043d\u044f\u0442 \u0434\u043e 147, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0434\u043e\u043d\u044b, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 24, \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Node.js 25 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0434\u043b\u044f Linux \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u044b \u0441 <code>libatomic<\/code>, \u0438 \u0435\u0451 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442.<\/p>\n<h3>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0421\u043e\u0431\u0440\u0430\u043b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043b\u0435\u0442 \u043f\u044f\u0442\u0438 \u043e\u0442 \u0440\u043e\u0434\u0443:<\/p>\n<pre><code>app\/\u251c\u2500\u2500 Dockerfile\u251c\u2500\u2500 server.js            # HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u251c\u2500\u2500 stream_test.js       # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u0440\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443-\u0441\u0442\u0440\u0438\u043c\u251c\u2500\u2500 register.mjs         # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0445\u0443\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430\u251c\u2500\u2500 hooks.mjs\u251c\u2500\u2500 main.mjs\u2514\u2500\u2500 node_modules\/    \u251c\u2500\u2500 legacy-csv-stream\/   # require('_stream_transform')    \u2514\u2500\u2500 fast-hash\/           # \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u0434\u0434\u043e\u043d, \u0441\u043e\u0431\u0440\u0430\u043d \u043f\u043e\u0434 Node 24<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<h4>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 1. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442: libatomic.so.1<\/h4>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0435\u0449\u0451 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 Dockerfile, \u0433\u0434\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 Node \u043a\u043b\u0430\u0434\u0443\u0442 \u0432 slim-\u043e\u0431\u0440\u0430\u0437:<\/p>\n<pre><code>FROM debian:trixie-slimCOPY node-v26.13.1-linux-x64\/ \/usr\/local\/COPY . \/appCMD [\"node\", \"\/app\/server.js\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Docker \u043d\u0430 \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043a\u0430\u0447\u0430\u043b \u0441\u043b\u043e\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b \u0438\u0445 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u0432 \u043d\u0438\u0445 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 Node 24 \u0438 26 \u0447\u0435\u0440\u0435\u0437 <code>bwrap<\/code>. \u0414\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430 \u044d\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:<\/p>\n<pre><code class=\"bash\">bwrap --bind rootfs-trixie-slim \/ --ro-bind node-v26.13.1-linux-x64 \/opt\/node \\  --dev \/dev --proc \/proc --tmpfs \/tmp \\  \/opt\/node\/bin\/node -e 'console.log(process.version, \"ok\")'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>rootfs-bookworm-slim       v24.22.3  v24.22.3 okrootfs-bookworm-slim       v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-trixie-slim         v24.22.3  v24.22.3 okrootfs-trixie-slim         v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-distroless-cc12     v24.22.3  v24.22.3 okrootfs-distroless-cc12     v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-distroless-cc13     v24.22.3  v24.22.3 okrootfs-distroless-cc13     v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-node26-slim         v24.22.3  v24.22.3 okrootfs-node26-slim         v26.13.1  v26.13.1 ok<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>Node 24 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435, Node 26 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0438 \u0432 <code>debian:bookworm-slim<\/code>, \u043d\u0438 \u0432 <code>debian:trixie-slim<\/code>, \u043d\u0438 \u0432 <code>distroless\/cc-debian12<\/code> \u0438 <code>cc-debian13<\/code>. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u0438\u0434\u043d\u0430 \u043f\u0440\u044f\u043c\u043e \u0432 <code>ldd<\/code>:<\/p>\n<pre><code>$ ldd node-v26.13.1-linux-x64\/bin\/node | grep atomiclibatomic.so.1 =&gt; \/lib\/x86_64-linux-gnu\/libatomic.so.1$ ldd node-v24.22.3-linux-x64\/bin\/node | grep atomic$<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 <code>node:26-slim<\/code> \u043f\u0430\u043a\u0435\u0442 <code>libatomic1<\/code> \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0435\u0440\u0451\u0442\u0435 \u0435\u0433\u043e \u043a\u0430\u043a \u0431\u0430\u0437\u043e\u0432\u044b\u0439, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442. \u041b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u0435, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 Node \u0441\u0430\u043c: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0430\u0440\u0445\u0438\u0432 \u0432 \u0441\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0437, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 distroless-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u043b\u0438 \u043a\u0430\u0447\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0432 CI-\u0440\u0430\u043d\u043d\u0435\u0440 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.<\/p>\n<h4>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 2. \u0421\u0442\u0430\u0440\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 _stream_transform<\/h4>\n<p>\u0422\u0430\u043a \u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u0442\u0440\u0438\u043c\u044b \u043b\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u044c \u043d\u0430\u0437\u0430\u0434, \u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445:<\/p>\n<pre><code>\/\/ node_modules\/legacy-csv-stream\/index.jsvar Transform = require('_stream_transform');var util = require('util');function Upper() { Transform.call(this); }util.inherits(Upper, Transform);Upper.prototype._transform = function (chunk, enc, cb) { cb(null, String(chunk).toUpperCase()); };module.exports = Upper;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430 22 \u0438 24 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 <code>ID;NAME<\/code>. \u041d\u0430 26.13.1:<\/p>\n<pre><code>Error: Cannot find module '_stream_transform'Require stack:- \/workspace\/habr\/node26-lts\/app\/node_modules\/legacy-csv-stream\/index.js- \/workspace\/habr\/node26-lts\/app\/stream_test.js    at Module._resolveFilename (node:internal\/modules\/cjs\/loader:1603:15)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0430 \u043d\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043d\u043e\u0447\u0438. \u041f\u043b\u043e\u0445\u043e, \u0447\u0442\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0447\u0443\u0436\u043e\u043c \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438.<\/p>\n<h4>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 3. res.writeHeader is not a function<\/h4>\n<pre><code>const http = require('node:http');const srv = http.createServer((req, res) =&gt; {  res.writeHeader(200, { 'content-type': 'text\/plain' });  res.end('ok\\n');});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430 22 \u0438 24 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <code>200 ok<\/code>. \u041d\u0430 26 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u0430\u0434\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435:<\/p>\n<pre><code>\/workspace\/habr\/node26-lts\/app\/server.js:3  res.writeHeader(200, { 'content-type': 'text\/plain' });      ^TypeError: res.writeHeader is not a function    at Server.&lt;anonymous&gt; (\/workspace\/habr\/node26-lts\/app\/server.js:3:7)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u043a\u043e\u0432\u0430\u0440\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f: healthcheck, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0440\u0442 \u043e\u0442\u043a\u0440\u044b\u0442, \u043f\u0440\u043e\u0439\u0434\u0451\u0442, \u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0440\u043e\u043d\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u0438\u0434\u0438\u0442 \u0432 \u0440\u0435\u0434\u043a\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435, \u0442\u0435\u0441\u0442\u044b \u0431\u0435\u0437 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u044f\u0442.<\/p>\n<h4>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 4. \u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u0434\u0434\u043e\u043d, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 24<\/h4>\n<p><code>node_modules<\/code> \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432 CI \u043d\u0430 Node 24, \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438 \u043f\u043e\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u043e\u0431\u0440\u0430\u0437 \u0441 Node 26:<\/p>\n<pre><code>Error: The module '\/workspace\/habr\/node26-lts\/app\/node_modules\/fast-hash\/build\/Release\/fast_hash.node'was compiled against a different Node.js version usingNODE_MODULE_VERSION 137. This version of Node.js requiresNODE_MODULE_VERSION 147. Please try re-compiling or re-installing<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u043e\u043c\u0435\u0440\u0430 ABI \u0443 \u0442\u0440\u0451\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0442\u0430\u043a\u0438\u0435:<\/p>\n<pre><code>$ node -p \"process.version+' '+process.versions.modules+' napi '+process.versions.napi\"v22.23.5 127 napi 10v24.22.3 137 napi 10v26.13.1 147 napi 10<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0447\u0438\u0441\u043b\u043e: \u0432\u0435\u0440\u0441\u0438\u044f Node-API \u0443 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f. \u042d\u0442\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u043a \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e.<\/p>\n<h4>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 5. module.register() \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0448\u0443\u043c\u0438\u0442<\/h4>\n<p>\u0425\u0443\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 <code>register()<\/code> \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445: APM-\u0430\u0433\u0435\u043d\u0442\u044b, \u043c\u043e\u043a\u0438, \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 TypeScript.<\/p>\n<pre><code>\/\/ register.mjsimport { register } from 'node:module';register('.\/hooks.mjs', import.meta.url);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430 26 \u043a\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u0432 \u043b\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>(node:970200) [DEP0205] DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 <code>--throw-deprecation<\/code>, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0430\u0434\u0430\u0435\u0442:<\/p>\n<pre><code>DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead.    at node:internal\/util:128:11    at register (node:internal\/modules\/esm\/loader:1014:3)    at file:\/\/\/workspace\/habr\/node26-lts\/app\/register.mjs:2:1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043f\u0443\u0442\u043d\u043e \u0434\u0432\u0435 \u043c\u0435\u043b\u043e\u0447\u0438. \u0424\u043b\u0430\u0433 <code>--experimental-transform-types<\/code>, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 <code>package.json<\/code>, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f:<\/p>\n<pre><code>node: bad option: --experimental-transform-types<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a <code>.ts<\/code>-\u0444\u0430\u0439\u043b\u0430 \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438 \u0442\u0438\u043f\u043e\u0432 \u0431\u0435\u0437 \u0444\u043b\u0430\u0433\u043e\u0432 \u043d\u0430 26.13.1 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0418 \u0435\u0449\u0451: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0438\u0434\u0430 <code>typeof localStorage !== 'undefined'<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u00ab\u043c\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\u00bb, \u043d\u0430 26 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0434\u0430\u0451\u0442 <code>undefined<\/code>, \u043d\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0432 \u043b\u043e\u0433 <code>ExperimentalWarning: localStorage is not available because --localstorage-file was not provided.<\/code> \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0448\u0443\u043c \u0432 \u043b\u043e\u0433\u0430\u0445.<\/p>\n<h3>\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0422\u0435\u0441\u0442\u044b \u043b\u043e\u0432\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u043e\u0441\u044c, \u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 2\u20134 \u0441\u0438\u0434\u044f\u0442 \u0432 <code>node_modules<\/code> \u0438 Dockerfile. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438:<\/p>\n<pre><code>#!\/bin\/sh# check_node26.sh \u2014 \u0438\u0449\u0435\u0442 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f node_modules) \u0442\u043e, \u0447\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0432 Node.js 26dir=\"${1:-.}\"echo \"## \u0423\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 API\"grep -rnE --include='*.js' --include='*.cjs' --include='*.mjs' --include='*.ts' \\  \"require\\(['\\\"](node:)?_stream_(readable|writable|duplex|transform|passthrough|wrap)['\\\"]\\)|from ['\\\"](node:)?_stream_|\\.writeHeader\\(|\\bregister\\(['\\\"]|--experimental-transform-types\" \\  \"$dir\" | grep -v 'registerHooks'echo \"## \u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0434\u043e\u043d\u044b \u0431\u0435\u0437 Node-API (\u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0434 NODE_MODULE_VERSION 147)\"find \"$dir\" -name '*.node' -type f | while read -r f; do  nm -D \"$f\" 2&gt;\/dev\/null | grep -q 'napi_register_module_v1' || echo \"$f\"doneecho \"## Dockerfile: \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a Node \u0431\u0435\u0437 libatomic1\"find \"$dir\" -maxdepth 3 -name 'Dockerfile*' | while read -r f; do  grep -qiE 'node' \"$f\" &amp;&amp; ! grep -q 'libatomic' \"$f\" &amp;&amp; grep -qiE '^FROM .*(slim|distroless)' \"$f\" &amp;&amp; echo \"$f\"donetrue<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0434\u0434\u043e\u043d\u043e\u0432 \u0442\u0430\u043a\u0430\u044f: \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430 Node-API \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b <code>napi_register_module_v1<\/code>, \u0438 \u0435\u0433\u043e ABI \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 Node. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0435\u0442, \u0430\u0434\u0434\u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c API \u043f\u043e\u0432\u0435\u0440\u0445 <code>node.h<\/code> \u0438 V8, \u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0430\u0436\u043e\u0440\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<p>\u041d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438:<\/p>\n<pre><code>## \u0423\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 APIapp\/server.js:3:  res.writeHeader(200, { 'content-type': 'text\/plain' });app\/node_modules\/legacy-csv-stream\/index.js:2:var Transform = require('_stream_transform');app\/register.mjs:2:register('.\/hooks.mjs', import.meta.url);## \u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0434\u043e\u043d\u044b \u0431\u0435\u0437 Node-API (\u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0434 NODE_MODULE_VERSION 147)app\/node_modules\/fast-hash\/build\/Release\/fast_hash.node## Dockerfile: \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a Node \u0431\u0435\u0437 libatomic1app\/Dockerfile<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0433\u0440\u0443\u0431\u044b\u0439: \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430 \u043d\u0430 <code>register('<\/code> \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c \u0447\u0443\u0436\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 Dockerfile \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f. \u041d\u043e \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u0432\u044b\u0448\u0435 \u0443\u043f\u0430\u043b\u043e, \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c Node 26.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0434\u0435\u0448\u0451\u0432\u044b\u0439 \u043f\u0440\u0438\u0451\u043c: \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 <code>--pending-deprecation --throw-deprecation<\/code>. \u0422\u043e\u0433\u0434\u0430 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435, \u043d\u043e \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u043d\u0430\u0447\u043d\u0451\u0442 \u043f\u0430\u0434\u0430\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<h3>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h3>\n<p><strong>libatomic.<\/strong> \u0412 Debian-\u043e\u0431\u0440\u0430\u0437\u0435 \u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442:<\/p>\n<pre><code>FROM debian:trixie-slimRUN apt-get update \\ &amp;&amp; apt-get install -y --no-install-recommends libatomic1 \\ &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*COPY node-v26.13.1-linux-x64\/ \/usr\/local\/COPY . \/appCMD [\"node\", \"\/app\/server.js\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 distroless \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043d\u0435\u0442, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0442\u0430\u0434\u0438\u0438:<\/p>\n<pre><code>FROM debian:trixie-slim AS libsRUN apt-get update &amp;&amp; apt-get install -y --no-install-recommends libatomic1FROM gcr.io\/distroless\/cc-debian13COPY --from=libs \/usr\/lib\/x86_64-linux-gnu\/libatomic.so.1* \/usr\/lib\/x86_64-linux-gnu\/COPY node-v26.13.1-linux-x64\/ \/usr\/local\/<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0430\u043c \u043e\u0431\u0440\u0430\u0437 \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u0433\u0434\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443: \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b <code>libatomic1<\/code> \u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 trixie-slim \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0442\u0435 \u0436\u0435 \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 (<code>libatomic.so.1<\/code> \u0438 <code>libatomic.so.1.2.0<\/code>) \u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>cc-debian13<\/code>. \u041d\u0443 \u0438 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0443\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e: \u0431\u0440\u0430\u0442\u044c \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <code>node:26-slim<\/code>.<\/p>\n<p><code><strong>_stream_*<\/strong><\/code><strong>.<\/strong> \u0412\u0441\u0451, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445, \u0434\u0430\u0432\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0438\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e <code>node:stream<\/code>:<\/p>\n<pre><code>\/\/ \u0431\u044b\u043b\u043e: var Transform = require('_stream_transform');var Transform = require('node:stream').Transform;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0438\u0449\u0438\u0442\u0435 \u0441\u0432\u0435\u0436\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0430\u043a\u0435\u0442\u0430. \u0415\u0441\u043b\u0438 \u043f\u0430\u043a\u0435\u0442 \u0437\u0430\u0431\u0440\u043e\u0448\u0435\u043d, \u043f\u0440\u0430\u0432\u043a\u0430 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 <code>patch-package<\/code> \u0438\u043b\u0438 \u0444\u043e\u0440\u043a, \u0430 \u0432 \u0434\u043e\u043b\u0433\u0443\u044e \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443.<\/p>\n<p><code><strong>writeHeader<\/strong><\/code><strong>.<\/strong> \u042d\u0442\u043e \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u0440\u044b\u0439 \u0430\u043b\u0438\u0430\u0441:<\/p>\n<pre><code>res.writeHead(200, { 'content-type': 'text\/plain' });<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p><strong>\u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0434\u043e\u043d\u044b.<\/strong> \u041f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434 26 (<code>npm rebuild<\/code> \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Node, \u0447\u0442\u043e \u0438 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435) \u0438, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0435 \u0442\u0430\u0441\u043a\u0430\u0442\u044c <code>node_modules<\/code> \u0441 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u0440\u0430\u0437\u0430\u043c\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 Node. \u0412 \u043a\u0435\u0448 CI \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e Node \u0432 \u043a\u043b\u044e\u0447. \u0414\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u0434\u0434\u043e\u043d\u0430 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0443 \u0440\u0443\u043a\u0430\u043c\u0438: \u0442\u043e\u0442 \u0436\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438 \u0438\u0437 \u0430\u0440\u0445\u0438\u0432\u0430 26.13.1, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 26 \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 24.<\/p>\n<p>\u041d\u0430\u0434\u0451\u0436\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 Node-API: \u0442\u043e\u0442 \u0436\u0435 \u00abhello\u00bb \u043d\u0430 <code>node_api.h<\/code> \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445. \u0415\u0441\u043b\u0438 \u0430\u0434\u0434\u043e\u043d \u0447\u0443\u0436\u043e\u0439, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043d\u0435\u0442 \u043b\u0438 \u0443 \u043d\u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 Node-API \u0438\u043b\u0438 prebuild \u043f\u043e\u0434 26.<\/p>\n<p><code><strong>module.register()<\/strong><\/code><strong>.<\/strong> \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 <code>registerHooks()<\/code>. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435: \u0445\u0443\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0442\u043e\u043a\u0435, \u0430 \u043d\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>async<\/code> \u0438 <code>await<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u0445 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code>\/\/ register.mjsimport { registerHooks } from 'node:module';\/\/ \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 \u0445\u0443\u043a\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0442\u043e\u043a\u0435; next() \u0442\u043e\u0436\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439registerHooks({  resolve(spec, ctx, next) { return next(spec, ctx); },});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u0445\u0443\u043a\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u0447\u0442\u043e-\u0442\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 (\u0445\u043e\u0434\u044f\u0442 \u0432 \u0441\u0435\u0442\u044c, \u0447\u0438\u0442\u0430\u044e\u0442 \u0444\u0430\u0439\u043b\u044b \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043c\u0438\u0441\u044b), \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u042d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0445\u0443\u043a\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 APM-\u0430\u0433\u0435\u043d\u0442\u0430 \u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 <code>registerHooks<\/code>.<\/p>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/strong> \u0412\u043c\u0435\u0441\u0442\u043e <code>localStorage<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u043e, \u0447\u0435\u0433\u043e \u0432 Node \u043d\u0435\u0442:<\/p>\n<pre><code>const isBrowser = typeof window !== 'undefined' &amp;&amp; typeof window.document !== 'undefined';<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h3>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0441 <code>--throw-deprecation --pending-deprecation<\/code>, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u043e\u0448\u0438\u0431\u043a\u043e\u0439:<\/p>\n<pre><code>for v in v22.23.5 v24.22.3 v26.13.1; do  N=\"..\/bin\/node-$v-linux-x64\/bin\/node --throw-deprecation --pending-deprecation\"  echo \"######## $v\"  $N stream_test.js  $N server.js  $N storage.js  $N --import .\/register.mjs main.mjs  $N -e \"console.log(require('..\/addon\/napi_addon.node').hello())\"done<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<pre><code>######## v22.23.5v22.23.5 ID;NAMEv22.23.5 200 okv22.23.5 isBrowser = falsev22.23.5 main loadedhello from napi addon######## v24.22.3v24.22.3 ID;NAMEv24.22.3 200 okv24.22.3 isBrowser = falsev24.22.3 main loadedhello from napi addon######## v26.13.1v26.13.1 ID;NAMEv26.13.1 200 okv26.13.1 isBrowser = falsev26.13.1 main loadedhello from napi addon<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 22, 24 \u0438 26, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0412\u0430\u0436\u043d\u043e \u0438 \u0442\u043e, \u0447\u0442\u043e <code>registerHooks()<\/code> \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 22.23.5 \u0438 24.22.3, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0443\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0437\u044b \u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c:<\/p>\n<pre><code>rootfs-trixie-fixed        v26.13.1  v26.13.1 okrootfs-distroless-fixed    v26.13.1  v26.13.1 ok<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0438\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u0436\u0435 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442:<\/p>\n<pre><code>rootfs-trixie-fixed v26.13.1 stream ok hello from napi addonrootfs-distroless-fixed v26.13.1 stream ok hello from napi addonv26.13.1 200 ok<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u043e\u043d <code>check_node26.sh<\/code> \u043f\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432, \u043d\u0430\u0445\u043e\u0434\u043e\u043a \u043d\u0435\u0442.<\/p>\n<h3>\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 26<\/h3>\n<ol>\n<li>\n<p>\u0415\u0441\u043b\u0438 Node \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u0438\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 <code>node:26<\/code>, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <code>libatomic1<\/code> \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e <code>node -v<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0439\u0434\u0438\u0442\u0435\u0441\u044c \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 <code>node_modules<\/code> \u043f\u043e\u0438\u0441\u043a\u043e\u043c <code>_stream_<\/code>, <code>writeHeader(<\/code> \u0438 <code>register(<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0439\u0434\u0438\u0442\u0435 <code>.node<\/code>-\u0444\u0430\u0439\u043b\u044b \u0431\u0435\u0437 Node-API \u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u0445. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e Node \u0432 \u043a\u043b\u044e\u0447 \u043a\u0435\u0448\u0430 <code>node_modules<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0438\u0442\u0435 <code>module.register()<\/code> \u043d\u0430 <code>registerHooks()<\/code>, \u043f\u043e\u043a\u0430 \u0432\u044b \u0435\u0449\u0451 \u043d\u0430 24.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 \u0442\u0435\u0441\u0442\u044b \u0441 <code>--throw-deprecation --pending-deprecation<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 healthcheck, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u043e\u0440\u0442.<\/p>\n<\/li>\n<\/ol>\n<p>\u0410 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u043d\u0430 26? \u0427\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0432\u044b\u043c: Dockerfile, \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0437 2016 \u0433\u043e\u0434\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0435 <code>node_modules<\/code>? \u0418 \u043a\u0430\u043a \u0432\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u043b\u043e\u0432\u0438\u0442\u0435 \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438: \u0442\u0435\u0441\u0442\u0430\u043c\u0438, \u043b\u0438\u043d\u0442\u0435\u0440\u043e\u043c \u0438\u043b\u0438 \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043f\u0430\u0434\u0435\u043d\u0438\u044e \u043d\u0430 \u0441\u0442\u0435\u0439\u0434\u0436\u0435?<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1107782\/\">https:\/\/habr.com\/ru\/articles\/1107782\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>28 \u043e\u043a\u0442\u044f\u0431\u0440\u044f Node.js 26 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0442\u0430\u0442\u0443\u0441 LTS \u0441 \u043a\u043e\u0434\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c Lithium, \u0430 \u0432 \u043d\u043e\u044f\u0431\u0440\u0435 \u0432\u044b\u0448\u0435\u043b \u043f\u0435\u0440\u0432\u044b\u0439 security-\u0440\u0435\u043b\u0438\u0437 \u044d\u0442\u043e\u0439 \u0432\u0435\u0442\u043a\u0438, 26.13.1. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0443\u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0441\u0442\u0430\u0432\u0438\u0442\u044c 26 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0451 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 22 \u0438\u043b\u0438 24.\u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 LTS \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0438\u0445\u043e: \u043f\u043e\u043c\u0435\u043d\u044f\u043b \u0432\u0435\u0440\u0441\u0438\u044e \u0432 .nvmrc \u0438 Dockerfile, \u043f\u0440\u043e\u0433\u043d\u0430\u043b \u0442\u0435\u0441\u0442\u044b, \u043f\u043e\u0435\u0445\u0430\u043b\u0438. \u0422\u0443\u0442 \u0442\u043e\u0436\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u0430\u043a, \u043d\u043e \u0432 26 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0445 API, \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 ABI \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0434\u043b\u044f Linux \u043d\u0430\u0447\u0430\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u0432 \u00ab\u0442\u043e\u043d\u043a\u0438\u0445\u00bb \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u0430\u0445. \u041b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043d\u0435 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435, \u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445 \u0434\u0435\u0441\u044f\u0442\u0438\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432 Dockerfile, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u0442.\u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u00ab\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2192 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u2192 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2192 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u00bb. \u0412\u0441\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u043d\u0430 Node.js 22.23.5, 24.22.3 \u0438 26.13.1 (\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 linux-x64).\u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c\u0418\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 26.0.0 \u0438 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0439 \u043a LTS-\u0440\u0435\u043b\u0438\u0437\u0443 \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0432\u0430\u0436\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u0443\u043d\u043a\u0442\u044b:http.ServerResponse.prototype.writeHeader() \u0443\u0434\u0430\u043b\u0451\u043d \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e writeHead();\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 _stream_readable, _stream_writable, _stream_duplex, _stream_transform, _stream_passthrough \u0438 _stream_wrap \u0443\u0434\u0430\u043b\u0435\u043d\u044b;module.register() \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0434\u0430\u0451\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 module.registerHooks();\u0444\u043b\u0430\u0433 &#8212;experimental-transform-types \u0443\u0434\u0430\u043b\u0451\u043d;NODE_MODULE_VERSION \u043f\u043e\u0434\u043d\u044f\u0442 \u0434\u043e 147, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0434\u043e\u043d\u044b, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 24, \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f;\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Node.js 25 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0434\u043b\u044f Linux \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u044b \u0441 libatomic, \u0438 \u0435\u0451 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442.\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u0421\u043e\u0431\u0440\u0430\u043b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043b\u0435\u0442 \u043f\u044f\u0442\u0438 \u043e\u0442 \u0440\u043e\u0434\u0443:app\/\u251c\u2500\u2500 Dockerfile\u251c\u2500\u2500 server.js            # HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u251c\u2500\u2500 stream_test.js       # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0430\u0440\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443-\u0441\u0442\u0440\u0438\u043c\u251c\u2500\u2500 register.mjs         # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0445\u0443\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430\u251c\u2500\u2500 hooks.mjs\u251c\u2500\u2500 main.mjs\u2514\u2500\u2500 node_modules\/    \u251c\u2500\u2500 legacy-csv-stream\/   # require(&#8216;_stream_transform&#8217;)    \u2514\u2500\u2500 fast-hash\/           # \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u0434\u0434\u043e\u043d, \u0441\u043e\u0431\u0440\u0430\u043d \u043f\u043e\u0434 Node 24\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 1. \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442: libatomic.so.1\u0421\u0430\u043c\u044b\u0439 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0435\u0449\u0451 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 Dockerfile, \u0433\u0434\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 Node \u043a\u043b\u0430\u0434\u0443\u0442 \u0432 slim-\u043e\u0431\u0440\u0430\u0437:FROM debian:trixie-slimCOPY node-v26.13.1-linux-x64\/ \/usr\/local\/COPY . \/appCMD [&#171;node&#187;, &#171;\/app\/server.js&#187;]Docker \u043d\u0430 \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043a\u0430\u0447\u0430\u043b \u0441\u043b\u043e\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438\u0437 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0435\u0441\u0442\u0440\u043e\u0432, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b \u0438\u0445 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u0432 \u043d\u0438\u0445 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 Node 24 \u0438 26 \u0447\u0435\u0440\u0435\u0437 bwrap. \u0414\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a\u0430 \u044d\u0442\u043e \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430:bwrap &#8212;bind rootfs-trixie-slim \/ &#8212;ro-bind node-v26.13.1-linux-x64 \/opt\/node \\  &#8212;dev \/dev &#8212;proc \/proc &#8212;tmpfs \/tmp \\  \/opt\/node\/bin\/node -e &#8216;console.log(process.version, &#171;ok&#187;)&#8217;rootfs-bookworm-slim       v24.22.3  v24.22.3 okrootfs-bookworm-slim       v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-trixie-slim         v24.22.3  v24.22.3 okrootfs-trixie-slim         v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-distroless-cc12     v24.22.3  v24.22.3 okrootfs-distroless-cc12     v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-distroless-cc13     v24.22.3  v24.22.3 okrootfs-distroless-cc13     v26.13.1  error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directoryrootfs-node26-slim         v24.22.3  v24.22.3 okrootfs-node26-slim         v26.13.1  v26.13.1 okNode 24 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435, Node 26 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0438 \u0432 debian:bookworm-slim, \u043d\u0438 \u0432 debian:trixie-slim, \u043d\u0438 \u0432 distroless\/cc-debian12 \u0438 cc-debian13. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u0438\u0434\u043d\u0430 \u043f\u0440\u044f\u043c\u043e \u0432 ldd:$ ldd node-v26.13.1-linux-x64\/bin\/node | grep atomiclibatomic.so.1 =&gt; \/lib\/x86_64-linux-gnu\/libatomic.so.1$ ldd node-v24.22.3-linux-x64\/bin\/node | grep atomic$\u0412 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 node:26-slim \u043f\u0430\u043a\u0435\u0442 libatomic1 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0435\u0440\u0451\u0442\u0435 \u0435\u0433\u043e \u043a\u0430\u043a \u0431\u0430\u0437\u043e\u0432\u044b\u0439, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442. \u041b\u043e\u043c\u0430\u044e\u0442\u0441\u044f \u0442\u0435, \u043a\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u0442 Node \u0441\u0430\u043c: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0430\u0440\u0445\u0438\u0432 \u0432 \u0441\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0437, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 distroless-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u043b\u0438 \u043a\u0430\u0447\u0430\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u0432 CI-\u0440\u0430\u043d\u043d\u0435\u0440 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 2. \u0421\u0442\u0430\u0440\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 _stream_transform\u0422\u0430\u043a \u043f\u0438\u0441\u0430\u043b\u0438 \u0441\u0442\u0440\u0438\u043c\u044b \u043b\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u044c \u043d\u0430\u0437\u0430\u0434, \u0438 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043b\u0435\u0436\u0438\u0442 \u0432 \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445:\/\/ node_modules\/legacy-csv-stream\/index.jsvar Transform = require(&#8216;_stream_transform&#8217;);var util = require(&#8216;util&#8217;);function Upper() { Transform.call(this); }util.inherits(Upper, Transform);Upper.prototype._transform = function (chunk, enc, cb) { cb(null, String(chunk).toUpperCase()); };module.exports = Upper;\u041d\u0430 22 \u0438 24 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 ID;NAME. \u041d\u0430 26.13.1:Error: Cannot find module &#8216;_stream_transform&#8217;Require stack:- \/workspace\/habr\/node26-lts\/app\/node_modules\/legacy-csv-stream\/index.js- \/workspace\/habr\/node26-lts\/app\/stream_test.js    at Module._resolveFilename (node:internal\/modules\/cjs\/loader:1603:15)\u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0430 \u043d\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043d\u043e\u0447\u0438. \u041f\u043b\u043e\u0445\u043e, \u0447\u0442\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0447\u0443\u0436\u043e\u043c \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438.\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 3. res.writeHeader is not a functionconst http = require(&#8216;node:http&#8217;);const srv = http.createServer((req, res) =&gt; {  res.writeHeader(200, { &#8216;content-type&#8217;: &#8216;text\/plain&#8217; });  res.end(&#8216;ok\\n&#8217;);});\u041d\u0430 22 \u0438 24 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 200 ok. \u041d\u0430 26 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u0430\u0434\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435:\/workspace\/habr\/node26-lts\/app\/server.js:3  res.writeHeader(200, { &#8216;content-type&#8217;: &#8216;text\/plain&#8217; });      ^TypeError: res.writeHeader is not a function    at Server.&lt;anonymous&gt; (\/workspace\/habr\/node26-lts\/app\/server.js:3:7)\u042d\u0442\u043e \u043a\u043e\u0432\u0430\u0440\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f: healthcheck, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0440\u0442 \u043e\u0442\u043a\u0440\u044b\u0442, \u043f\u0440\u043e\u0439\u0434\u0451\u0442, \u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0440\u043e\u043d\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u0438\u0434\u0438\u0442 \u0432 \u0440\u0435\u0434\u043a\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435, \u0442\u0435\u0441\u0442\u044b \u0431\u0435\u0437 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u044f\u0442.\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 4. \u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u0434\u0434\u043e\u043d, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 24node_modules \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432 CI \u043d\u0430 Node 24, \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0438 \u043f\u043e\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0432 \u043e\u0431\u0440\u0430\u0437 \u0441 Node 26:Error: The module &#8216;\/workspace\/habr\/node26-lts\/app\/node_modules\/fast-hash\/build\/Release\/fast_hash.node&#8217;was compiled against a different Node.js version usingNODE_MODULE_VERSION 137. This version of Node.js requiresNODE_MODULE_VERSION 147. Please try re-compiling or re-installing\u041d\u043e\u043c\u0435\u0440\u0430 ABI \u0443 \u0442\u0440\u0451\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0442\u0430\u043a\u0438\u0435:$ node -p &#171;process.version+&#8217; &#8216;+process.versions.modules+&#8217; napi &#8216;+process.versions.napi&#187;v22.23.5 127 napi 10v24.22.3 137 napi 10v26.13.1 147 napi 10\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0447\u0438\u0441\u043b\u043e: \u0432\u0435\u0440\u0441\u0438\u044f Node-API \u0443 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f. \u042d\u0442\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u043a \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e.\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 5. module.register() \u043f\u043e\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0448\u0443\u043c\u0438\u0442\u0425\u0443\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 register() \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445: APM-\u0430\u0433\u0435\u043d\u0442\u044b, \u043c\u043e\u043a\u0438, \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 TypeScript.\/\/ register.mjsimport { register } from &#8216;node:module&#8217;;register(&#8216;.\/hooks.mjs&#8217;, import.meta.url);\u041d\u0430 26 \u043a\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u0432 \u043b\u043e\u0433\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f:(node:970200) [DEP0205] DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead.\u0410 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 &#8212;throw-deprecation, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0430\u0434\u0430\u0435\u0442:DeprecationWarning: `module.register()` is deprecated. Use `module.registerHooks()` instead.    at node:internal\/util:128:11    at register (node:internal\/modules\/esm\/loader:1014:3)    at file:\/\/\/workspace\/habr\/node26-lts\/app\/register.mjs:2:1\u041f\u043e\u043f\u0443\u0442\u043d\u043e \u0434\u0432\u0435 \u043c\u0435\u043b\u043e\u0447\u0438. \u0424\u043b\u0430\u0433 &#8212;experimental-transform-types, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 package.json, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f:node: bad option: &#8212;experimental-transform-types\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a .ts-\u0444\u0430\u0439\u043b\u0430 \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438 \u0442\u0438\u043f\u043e\u0432 \u0431\u0435\u0437 \u0444\u043b\u0430\u0433\u043e\u0432 \u043d\u0430 26.13.1 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0418 \u0435\u0449\u0451: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u0438\u0434\u0430 typeof localStorage !== &#8216;undefined&#8217;, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u00ab\u043c\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\u00bb, \u043d\u0430 26 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0434\u0430\u0451\u0442 undefined, \u043d\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0432 \u043b\u043e\u0433 ExperimentalWarning: localStorage is not available because &#8212;localstorage-file was not provided. \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0448\u0443\u043c \u0432 \u043b\u043e\u0433\u0430\u0445.\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0422\u0435\u0441\u0442\u044b \u043b\u043e\u0432\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u043e\u0441\u044c, \u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 2\u20134 \u0441\u0438\u0434\u044f\u0442 \u0432 node_modules \u0438 Dockerfile. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438:#!\/bin\/sh# check_node26.sh \u2014 \u0438\u0449\u0435\u0442 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f node_modules) \u0442\u043e, \u0447\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0432 Node.js 26dir=&#187;${1:-.}&#187;echo &#171;## \u0423\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 API&#187;grep -rnE &#8212;include=&#8217;*.js&#8217; &#8212;include=&#8217;*.cjs&#8217; &#8212;include=&#8217;*.mjs&#8217; &#8212;include=&#8217;*.ts&#8217; \\  &#171;require\\([&#8216;\\&#187;](node:)?_stream_(readable|writable|duplex|transform|passthrough|wrap)[&#8216;\\&#187;]\\)|from [&#8216;\\&#187;](node:)?_stream_|\\.writeHeader\\(|\\bregister\\([&#8216;\\&#187;]|&#8212;experimental-transform-types&#187; \\  &#171;$dir&#187; | grep -v &#8216;registerHooks&#8217;echo &#171;## \u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0434\u043e\u043d\u044b \u0431\u0435\u0437 Node-API (\u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0434 NODE_MODULE_VERSION 147)&#187;find &#171;$dir&#187; -name &#8216;*.node&#8217; -type f | while read -r f; do  nm -D &#171;$f&#187; 2&gt;\/dev\/null | grep -q &#8216;napi_register_module_v1&#8217; || echo &#171;$f&#187;doneecho &#171;## Dockerfile: \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a Node \u0431\u0435\u0437 libatomic1&#8243;find &#171;$dir&#187; -maxdepth 3 -name &#8216;Dockerfile*&#8217; | while read -r f; do  grep -qiE &#8216;node&#8217; &#171;$f&#187; &amp;&amp; ! grep -q &#8216;libatomic&#8217; &#171;$f&#187; &amp;&amp; grep -qiE &#8216;^FROM .*(slim|distroless)&#8217; &#171;$f&#187; &amp;&amp; echo &#171;$f&#187;donetrue\u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0434\u0434\u043e\u043d\u043e\u0432 \u0442\u0430\u043a\u0430\u044f: \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0430 Node-API \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u0438\u043c\u0432\u043e\u043b napi_register_module_v1, \u0438 \u0435\u0433\u043e ABI \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 Node. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0435\u0442, \u0430\u0434\u0434\u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c API \u043f\u043e\u0432\u0435\u0440\u0445 node.h \u0438 V8, \u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0430\u0436\u043e\u0440\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.\u041d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438:## \u0423\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 APIapp\/server.js:3:  res.writeHeader(200, { &#8216;content-type&#8217;: &#8216;text\/plain&#8217; });app\/node_modules\/legacy-csv-stream\/index.js:2:var Transform = require(&#8216;_stream_transform&#8217;);app\/register.mjs:2:register(&#8216;.\/hooks.mjs&#8217;, import.meta.url);## \u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0434\u043e\u043d\u044b \u0431\u0435\u0437 Node-API (\u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0434 NODE_MODULE_VERSION 147)app\/node_modules\/fast-hash\/build\/Release\/fast_hash.node## Dockerfile: \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a Node \u0431\u0435\u0437 libatomic1app\/Dockerfile\u0421\u043a\u0440\u0438\u043f\u0442 \u0433\u0440\u0443\u0431\u044b\u0439: \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430 \u043d\u0430 register(&#8216; \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0446\u0435\u043f\u0438\u0442\u044c \u0447\u0443\u0436\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0438\u043c\u0435\u043d\u0435\u043c, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 Dockerfile \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f. \u041d\u043e \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044e \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u0432\u044b\u0448\u0435 \u0443\u043f\u0430\u043b\u043e, \u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-503192","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/503192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=503192"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/503192\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=503192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=503192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=503192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}