{"id":86339,"date":"2024-12-01T15:42:53","date_gmt":"2024-12-01T12:12:53","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/"},"modified":"2024-12-01T15:42:53","modified_gmt":"2024-12-01T12:12:53","slug":"how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/","title":{"rendered":"\u0646\u062d\u0648\u0647 \u0633\u0627\u062e\u062a \u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc \u0686\u0646\u062f \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u062f\u0631 Node.js \u0628\u0627 SEA\u060c Rollup\u060c Docker \u0648 GitHub"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n              \u0646\u0627\u0645 \u0645\u0646 \u0633\u0631\u06af\u0626\u06cc \u0627\u0633\u062a \u0648 \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 dclint\u060c \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 CLI \u0628\u0631\u0627\u06cc \u067e\u0631 \u06a9\u0631\u062f\u0646 \u0648 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc Docker Compose \u0647\u0633\u062a\u0645.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0646\u062d\u0648\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0627\u0628\u0632\u0627\u0631 Node.js CLI \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f \u06a9\u0647:<\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0645\u0633\u062a\u0642\u0644 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0635\u0628 Node.js \u0646\u062f\u0627\u0631\u062f.<br \/>\n\u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc (arm64\/amd64) \u0648 \u0633\u06cc\u0633\u062a\u0645 \u0639\u0627\u0645\u0644 (Alpine\/Ubuntu) \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.<br \/>\n\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u062f\u0631 \u062e\u0637\u0648\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0627\u062f\u063a\u0627\u0645 \u0634\u0648\u062f.<\/p>\n<p>\u0645\u0627 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627 \u067e\u0648\u0634\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Node.js Single Executable Applications (SEA)\u060c \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc Rollup \u0628\u0631\u0627\u06cc \u0628\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u060c \u0633\u0627\u062e\u062a \u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u0628\u0647\u06cc\u0646\u0647\u200c\u0633\u0627\u0632\u06cc \u0634\u062f\u0647\u060c \u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0646\u062a\u0634\u0627\u0631 \u0628\u0627 GitHub Actions.<\/p>\n<p>  \u06a9\u0645\u06cc \u0632\u0645\u06cc\u0646\u0647<\/p>\n<p>\u062f\u06cc\u06a9\u0644\u06cc\u0646\u062a \u062f\u0631 TypeScript \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0627\u06cc\u0646 \u0632\u0628\u0627\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u0628\u0627 \u0622\u0646 \u0631\u0627\u062d\u062a \u062a\u0631 \u0647\u0633\u062a\u0645 \u0648 \u0645\u062f\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u062f\u0631 \u0630\u0647\u0646 \u062f\u0627\u0634\u062a\u0645 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0628\u0648\u062f:<\/p>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0627 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc Docker Compose \u0633\u0631 \u0648 \u06a9\u0627\u0631 \u062f\u0627\u0631\u06cc\u0645\u060c Docker \u0642\u0628\u0644\u0627\u064b \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0648\u0632\u06cc\u0639 \u0627\u0628\u0632\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u062f\u0627\u06a9\u0631 \u0627\u06cc\u0646 \u0633\u0648\u0627\u0644 \u0631\u0627 \u062d\u0644 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u06a9\u062f\u0627\u0645 \u0632\u0628\u0627\u0646 \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u062f\u0627\u06a9\u0631 \u062a\u0646\u0647\u0627 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0627\u0633\u062a. \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc Node.js\u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0622\u0646 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0622\u0646 \u0646\u06cc\u0632 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0646\u062f npx.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 (\u0648 \u0627\u06cc\u0646 \u0632\u06cc\u0628\u0627\u06cc\u06cc \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 \u0627\u0633\u062a)\u060c \u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0648\u0634 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u06a9\u0631\u062f:<\/p>\n<p>\u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646\u060c \u0645\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062a\u062e\u0635\u0635\u06cc \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u0628\u0627 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u062c\u0645\u0639\u200c\u0634\u062f\u0647 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645 \u062a\u0627 \u0627\u062c\u0631\u0627\u06a9\u0646\u0646\u062f\u0647\u200c\u0647\u0627\u06cc CI\/CD \u0645\u0627 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f \u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0628\u0627 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0634 \u06a9\u0646\u0646\u062f.\u00bb- \u0622\u062f\u0627\u0645 \u0644\u06cc\u0632\u06a9\u0627\u06cc \u062f\u0631 \u0628\u062d\u062b GitHub<\/p>\n<p>\u0648 \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0634\u062f \u0628\u0647 \u0641\u06a9\u0631 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0645 \u0628\u0627\u0634\u0645 \u06a9\u0647 \u0627\u0635\u0644\u0627\u064b \u0628\u0647 Node.js \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u0628\u0627\u0634\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0647\u062f\u0627\u0641 \u0645\u0646 \u0627\u06cc\u0646 \u0628\u0648\u062f:<\/p>\n<p>\u06cc\u06a9 \u0641\u0631\u0622\u06cc\u0646\u062f \u0633\u0627\u062e\u062a \u0648\u0627\u0636\u062d \u0648 \u0633\u0631\u0631\u0627\u0633\u062a.<br \/>\n\u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062a\u0627 \u062d\u062f \u0627\u0645\u06a9\u0627\u0646 \u06a9\u0648\u0686\u06a9.<br \/>\n\u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0627 \u062d\u062f\u0627\u0642\u0644 \u0627\u0648\u0628\u0648\u0646\u062a\u0648 \u0648 \u0622\u0644\u067e\u0627\u06cc\u0646.<br \/>\n\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0647\u0631 \u062f\u0648 \u0645\u0639\u0645\u0627\u0631\u06cc arm64 \u0648 amd64.<\/p>\n<p>  \u0686\u0647 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc\u06cc \u062f\u0627\u0631\u0645<\/p>\n<p>\u0686\u0646\u062f\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627\u06cc \u0645\u0633\u062a\u0642\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<p>\u0647\u0631 \u062f\u0648 \u0627\u0628\u0632\u0627\u0631 \u0628\u0627 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0648 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0628 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646\u060c \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0622\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u06a9\u0627\u0631 \u0646\u06a9\u0631\u062f.<\/p>\n<p>\u0627\u06af\u0631\u0686\u0647 \u0646\u0633\u0628\u062a\u0627\u064b \u0627\u062e\u06cc\u0631\u0627\u064b \u062f\u0631 Node.js 21 API \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc \u0645\u0646\u0641\u0631\u062f \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f\u0646\u062f<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631\u060c \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 1.1 \u0627\u0633\u062a\u060c \u06cc\u0639\u0646\u06cc \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 &#8220;\u062a\u062c\u0631\u0628\u06cc. \u062a\u0648\u0633\u0639\u0647 \u0641\u0639\u0627\u0644.\u00bb \u0627\u0645\u0627 \u0645\u0646 \u0627\u0632 \u06a9\u0634\u0641 \u0631\u0648\u06cc\u06a9\u0631\u062f\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0644\u0630\u062a \u0645\u06cc \u0628\u0631\u0645\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u0622\u0646 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u0645.<\/p>\n<p>\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f. \u0627\u06af\u0631 \u062a\u0631\u062c\u06cc\u062d \u0645\u06cc \u062f\u0647\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0648\u0627\u0631\u062f \u06a9\u062f \u0634\u0648\u06cc\u062f\u060c \u0645\u062e\u0632\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0648 \u0641\u0631\u0627\u0645\u0648\u0634 \u0646\u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u06af\u0631 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc\u062f\u060c \u06cc\u06a9 \u0633\u062a\u0627\u0631\u0647 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f!<\/p>\n<p>  Single Executable Applications API<\/p>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc \u0627\u06cc\u0646 \u06cc\u06a9 Node.js API \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Node.js \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645\u06cc \u06a9\u0647 Node.js \u0646\u0635\u0628 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u062a\u0648\u0632\u06cc\u0639 \u06a9\u0646\u062f.\u0648\u06cc\u0698\u06af\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0645\u0646\u0641\u0631\u062f \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u062a\u0646\u0647\u0627 \u0627\u0632 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0627\u0698\u0648\u0644 CommonJS \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.\u0645\u0633\u062a\u0646\u062f\u0627\u062a Node.js<\/p>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0639\u0627\u0644\u06cc \u0647\u0633\u062a\u0646\u062f \u0648 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f\u060c \u06cc\u06a9 \u067e\u0648\u0633\u062a\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645 generate-sea.sh. \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0644\u0627\u0632\u0645 \u0631\u0627 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0622\u0633\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a:<\/p>\n<p>#!\/bin\/sh<\/p>\n<p># Checking that the path to the generation file is passed as an argument<br \/>\nif [ -z &#8220;$1&#8221; ]; then<br \/>\n  echo &#8220;Usage: $0 &#8221;<br \/>\n  exit 1<br \/>\nfi<\/p>\n<p>GENERATION_PATH=&#8221;$1&#8243;<\/p>\n<p># Generate binary<br \/>\nrm -rf &#8220;$GENERATION_PATH&#8221; &amp;&amp; rm -rf sea-prep.blob &amp;&amp; \\<br \/>\nmkdir -p &#8220;$(dirname &#8220;$GENERATION_PATH&#8221;)&#8221; &amp;&amp; \\<br \/>\nnode &#8211;experimental-sea-config sea-config.json &amp;&amp; \\<br \/>\ncp &#8220;$(command -v node)&#8221; &#8220;$GENERATION_PATH&#8221; &amp;&amp; \\<br \/>\nnpx -y postject &#8220;$GENERATION_PATH&#8221; NODE_SEA_BLOB sea-prep.blob &#8211;sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc\u060c \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u0645\u0633\u06cc\u0631 \u062e\u0631\u0648\u062c\u06cc \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644:<\/p>\n<p>.\/scripts\/generate-sea.sh .\/bin\/dclint<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0630\u06a9\u0631 \u0634\u062f\u060c SEA \u0641\u0642\u0637 \u0628\u0627 \u06cc\u06a9 \u062a\u06a9 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0627\u0698\u0648\u0644 CommonJS. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646\u060c \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0628\u0647 \u06cc\u06a9 \u0628\u0627\u0646\u062f\u0644\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u062a\u0627 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 CommonJS\u060c \u0634\u0627\u0645\u0644 \u062a\u0645\u0627\u0645 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627 \u0627\u0632 node_modules.<\/p>\n<p>  \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc<\/p>\n<p>\u0645\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0645 \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0628\u0627\u0646\u062f\u0644\u0631 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0647\u0646\u06af\u0627\u0645 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u062f \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0628\u0627\u0646\u062f\u0644\u0631 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a \u062f\u0631\u062e\u062a \u062a\u06a9\u0627\u0646 \u062f\u0627\u062f\u0646 (\u062d\u0630\u0641 \u06a9\u062f\u0647\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0634\u062f\u0647). Rollup \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.  <\/p>\n<p>Rollup \u06cc\u06a9 \u0628\u0633\u062a\u0647 \u0645\u0627\u0698\u0648\u0644 \u0628\u0631\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a \u06a9\u0647 \u0642\u0637\u0639\u0627\u062a \u06a9\u0648\u0686\u06a9\u06cc \u0627\u0632 \u06a9\u062f \u0631\u0627 \u062f\u0631 \u0686\u06cc\u0632\u06cc \u0628\u0632\u0631\u06af\u062a\u0631 \u0648 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062a\u0631 \u0645\u0627\u0646\u0646\u062f \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f.\u0627\u0633\u0646\u0627\u062f \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc  <\/p>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0646\u062a\u06cc\u062c\u0647 \u062f\u0644\u062e\u0648\u0627\u0647\u060c \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 Rollup \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645:<\/p>\n<p>export default {<br \/>\n  &#8230;baseConfig(&#8216;pkg&#8217;, false, false), \/\/ Import a shared base config<br \/>\n  input: &#8216;src\/cli\/cli.ts&#8217;,<br \/>\n  output: {<br \/>\n    file: &#8216;pkg\/dclint.cjs&#8217;,<br \/>\n    format: &#8216;cjs&#8217;,<br \/>\n    inlineDynamicImports: true,<br \/>\n    exports: &#8216;auto&#8217;,<br \/>\n  },<br \/>\n  context: &#8216;globalThis&#8217;,<br \/>\n};<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u067e\u0627\u06cc\u0647 \u0645\u0634\u062a\u0631\u06a9\u060c \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc TypeScript\u060c JSON \u0648 \u0633\u0627\u06cc\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc \u062e\u0627\u0635 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.  <\/p>\n<p>\u0628\u0631 \u062e\u0644\u0627\u0641 \u0633\u0627\u06cc\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0627\u062e\u062a\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0641\u0627\u0648\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:  <\/p>\n<p>inlineDynamicImports: \u062f\u0631\u0633\u062a \u0627\u0633\u062a &#8211; \u062a\u0645\u0627\u0645 \u0645\u0646\u0637\u0642 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0648\u0627\u062d\u062f \u062c\u0645\u0639 \u0645\u06cc \u0634\u0648\u062f\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u06a9\u062f \u0627\u0632 \u0648\u0627\u0631\u062f\u0627\u062a \u067e\u0648\u06cc\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f.<\/p>\n<p>\u0641\u0631\u0645\u062a: &#39;cjs&#39; &#8211; \u0641\u0631\u0645\u062a \u0628\u0627\u0646\u062f\u0644 \u062e\u0631\u0648\u062c\u06cc \u0627\u0633\u062a CommonJS.<\/p>\n<p>\u062e\u06cc\u0631 external \u0645\u06cc\u062f\u0627\u0646 &#8211; \u0647\u0645\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0647\u0645\u0631\u0627\u0647 \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>\u0646\u062a\u06cc\u062c\u0647 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a 10 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a\u06cc \u0628\u0648\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0627 SEA\u060c \u062d\u062c\u0645 \u0641\u0627\u06cc\u0644 \u0628\u0647 100 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a \u0627\u0641\u0632\u0627\u06cc\u0634 \u06cc\u0627\u0641\u062a. \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0646\u0633\u0628\u062a\u0627 \u0633\u0627\u062f\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0632\u0631\u06af \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0645\u0646 \u062e\u0648\u0628 \u0627\u0633\u062a. <\/p>\n<p>\u0648 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u062e\u0648\u062f\u06a9\u0641\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a. \u06cc\u0627 \u0647\u0633\u062a\u061f  <\/p>\n<p>  \u062f\u0627\u06a9\u0631<\/p>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 SEA \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0648\u0645\u06cc \u0627\u0632 \u0633\u0627\u062e\u062a\u0646 \u0628\u0631\u0627\u06cc \u067e\u0644\u062a\u0641\u0631\u0645\u200c\u0647\u0627 \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0628\u0647 \u0645\u062d\u06cc\u0637\u06cc \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f \u0645\u062a\u06a9\u06cc \u0627\u0633\u062a &#8211; \u062f\u0627\u06a9\u0631 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u200c\u0647\u0627\u06cc \u0686\u0646\u062f \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.<\/p>\n<p>Docker \u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u0628\u0627\u0632 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647\u060c \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u0648 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0627\u0633\u062a.Docker \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u0648 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u06a9\u0627\u0645\u0644\u0627\u064b \u0627\u06cc\u0632\u0648\u0644\u0647 \u0628\u0647 \u0646\u0627\u0645 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u062f\u0627\u06a9\u0631<\/p>\n<p>  \u0628\u0627 Docker \u0628\u0627\u06cc\u0646\u0631\u06cc \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646 generate-sea.sh \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0627\u06cc\u062f \u062f\u0631 \u0647\u0645\u0627\u0646 \u0645\u062d\u06cc\u0637\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0627\u062c\u0631\u0627 \u0634\u0648\u062f.  <\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u0648\u0628\u0648\u0646\u062a\u0648 (arm64)\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645:<\/p>\n<p>docker run &#8211;rm &#8211;platform linux\/arm64 -v &#8220;$PWD&#8221;:\/app -w \/app node:20.18.0-bullseye .\/scripts\/generate-sea.sh .\/sea\/dclint-bullseye-arm64<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u0636\u06cc\u062d:<\/p>\n<p>&#8211;platform linux\/arm64  \u0645\u0639\u0645\u0627\u0631\u06cc \u0647\u062f\u0641 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>node:20.18.0-bullseye  \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 Docker Node.js \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0627\u0648\u0628\u0648\u0646\u062a\u0648 \u0633\u0627\u0632\u06af\u0627\u0631 \u0627\u0633\u062a.<\/p>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u062a\u0635\u0648\u06cc\u0631 \u062f\u0627\u06a9\u0631<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u062a\u0648\u0644\u06cc\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627\u060c \u0627\u0628\u0632\u0627\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 Docker \u062a\u0648\u0632\u06cc\u0639 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u06cc\u06a9 Dockerfile \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0638\u0631\u0641 \u0646\u0647\u0627\u06cc\u06cc \u0645\u0646 \u0627\u0632 a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0633\u0627\u062e\u062a \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0631\u0633\u0627\u0646\u062f\u0646 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0627\u0648\u0644\u060c \u0628\u0627\u06cc\u0646\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 generate-sea.sh \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u0648 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0622\u062e\u0631 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0631\u0627 \u06a9\u067e\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u0631\u0627 \u067e\u0634\u062a \u0633\u0631 \u0645\u06cc \u06af\u0630\u0627\u0631\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0645\u0631\u062d\u0644\u0647 \u0622\u062e\u0631 \u0627\u0632 \u062f\u0648 \u0646\u0648\u0639 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645: \u0622\u0644\u067e\u0627\u06cc\u0646 \u0648 \u062e\u0631\u0627\u0634.<\/p>\n<p>Alpine \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0627\u06cc\u0647 \u062d\u062f\u0627\u0642\u0644 (~ 5 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a)\u060c \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0641\u0636\u0627\u06cc \u06a9\u0645\u06cc \u0648 \u0627\u0645\u0646\u06cc\u062a \u0628\u06cc\u0634\u062a\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0646\u062f. Alpine \u062f\u0631 Docker HubScratch \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0627\u06cc\u0647 \u062e\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0647\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0633\u0628\u06a9 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc \u0645\u0633\u062a\u0642\u0644 \u0628\u0627 \u062d\u062f\u0627\u0642\u0644 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a. \u0631\u0648\u06cc \u062f\u0627\u06a9\u0631 \u0647\u0627\u0628 \u062e\u0631\u0627\u0634 \u062f\u0647\u06cc\u062f  <\/p>\n<p>\u0645\u062b\u0627\u0644 Dockerfile:<\/p>\n<p># First stage (builder)<br \/>\n# &#8212;&#8212;&#8212;&#8212;-<br \/>\nFROM node:20.18.0-alpine3.19 AS builder<\/p>\n<p># Create working directory<br \/>\nWORKDIR \/dclint<\/p>\n<p># Copy package.json and install dependencies<br \/>\nCOPY package*.json .\/<br \/>\nRUN npm ci<\/p>\n<p># Copy the rest of the project<br \/>\nCOPY . .<\/p>\n<p># Build the binary with Rollup and SEA script<br \/>\nRUN npm run build:pkg &amp;&amp; .\/scripts\/generate-sea.sh \/bin\/dclint<\/p>\n<p># Final stage (alpine)<br \/>\n# &#8212;&#8212;&#8212;&#8212;-<br \/>\nFROM alpine:3.19 AS alpine-version<\/p>\n<p># Suppress experimental warnings<br \/>\nENV NODE_NO_WARNINGS=1<\/p>\n<p># Copy the binary from the builder stage<br \/>\nCOPY &#8211;from=builder \/bin\/dclint \/bin\/dclint<\/p>\n<p># Create working directory<br \/>\nWORKDIR \/app<\/p>\n<p># Define the entry point<br \/>\nENTRYPOINT [&#8220;\/bin\/dclint&#8221;]\n<p># Final stage (scratch)<br \/>\n# &#8212;&#8212;&#8212;&#8212;-<br \/>\nFROM scratch AS scratch-version<\/p>\n<p># Suppress experimental warnings<br \/>\nENV NODE_NO_WARNINGS=1<\/p>\n<p># Copy the binary from the builder stage<br \/>\nCOPY &#8211;from=builder \/bin\/dclint \/bin\/dclint<\/p>\n<p># Create working directory<br \/>\nWORKDIR \/app<\/p>\n<p># Define the entry point<br \/>\nENTRYPOINT [&#8220;\/bin\/dclint&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647<\/p>\n<p>\u0627\u0645\u0627 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u0632 \u062a\u0635\u0648\u06cc\u0631 \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f \u062e\u0637\u0627\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0632\u06cc\u0631 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<p>Error loading shared library libstdc++.so.6: No such file or directory (needed by \/bin\/dclint)<br \/>\nError relocating \/bin\/dclint: _ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev: symbol not found<br \/>\n&#8230;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f \u06a9\u0647\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 Node.js \u062f\u0631 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0633\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647 \u0622\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f libstdc++ \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u060c \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062a\u0648\u0633\u0637 ldd \/bin\/dclint \u062f\u0633\u062a\u0648\u0631:<\/p>\n<p>ldd \/bin\/dclint<br \/>\n    \/lib\/ld-musl-aarch64.so.1 (0xffffaeac8000)<br \/>\n    libstdc++.so.6 =&gt; \/usr\/lib\/libstdc++.so.6 (0xffff9fe00000)<br \/>\n    libc.musl-aarch64.so.1 =&gt; \/lib\/ld-musl-aarch64.so.1 (0xffffaeac8000)<br \/>\n    libgcc_s.so.1 =&gt; \/usr\/lib\/libgcc_s.so.1 (0xffffaea97000)<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u0644\u0628\u062a\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0646\u0647\u0627\u06cc\u06cc \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<p># Copy library dependencies<br \/>\nCOPY &#8211;from=builder \/lib\/ld-musl-aarch64.so.1 \/lib\/ld-musl-aarch64.so.1<br \/>\nCOPY &#8211;from=builder \/usr\/lib\/libgcc_s.so.1 \/usr\/lib\/libgcc_s.so.1<br \/>\nCOPY &#8211;from=builder \/usr\/lib\/libstdc++.so.6 \/usr\/lib\/libstdc++.so.6<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0647\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0633\u062a (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c arm64 \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 amd64)\u060c \u0645\u0646 \u0627\u0632 \u062e\u0631\u0648\u062c\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 ldd \/bin\/dclint \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627\u060c \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0648\u0634\u0647 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0633\u067e\u0633 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<p># Collect platform-specific dependencies<br \/>\nRUN mkdir -p \/dependencies\/lib \/dependencies\/usr\/lib &amp;&amp; \\<br \/>\n    ldd \/bin\/dclint | awk &#8216;{print $3}&#8217; | grep -vE &#8216;^$&#8217; | while read -r lib; do \\<br \/>\n        if [ -f &#8220;$lib&#8221; ]; then \\<br \/>\n            if [ &#8220;${lib#\/usr\/lib\/}&#8221; != &#8220;$lib&#8221; ]; then \\<br \/>\n                cp &#8220;$lib&#8221; \/dependencies\/usr\/lib\/; \\<br \/>\n            elif [ &#8220;${lib#\/lib\/}&#8221; != &#8220;$lib&#8221; ]; then \\<br \/>\n                cp &#8220;$lib&#8221; \/dependencies\/lib\/; \\<br \/>\n            fi; \\<br \/>\n        fi; \\<br \/>\n    done<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f\u060c \u0641\u06cc\u0646\u0627\u0644 Dockerfile \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n<p># First stage (builder)<br \/>\n# &#8212;&#8212;&#8212;&#8212;-<br \/>\nFROM node:20.18.0-alpine3.19 AS builder<\/p>\n<p>WORKDIR \/dclint<\/p>\n<p>COPY package*.json .\/<br \/>\nRUN npm ci<\/p>\n<p>COPY . .<\/p>\n<p># SEA Builder<br \/>\nRUN npm run build:pkg &amp;&amp; .\/scripts\/generate-sea.sh \/bin\/dclint<\/p>\n<p># Collect platform-specific dependencies<br \/>\nSHELL [&#8220;\/bin\/ash&#8221;, &#8220;-o&#8221;, &#8220;pipefail&#8221;, &#8220;-c&#8221;]\nRUN mkdir -p \/dependencies\/lib \/dependencies\/usr\/lib &amp;&amp; \\<br \/>\n    ldd \/bin\/dclint | awk &#8216;{print $3}&#8217; | grep -vE &#8216;^$&#8217; | while read -r lib; do \\<br \/>\n        if [ -f &#8220;$lib&#8221; ]; then \\<br \/>\n            if [ &#8220;${lib#\/usr\/lib\/}&#8221; != &#8220;$lib&#8221; ]; then \\<br \/>\n                cp &#8220;$lib&#8221; \/dependencies\/usr\/lib\/; \\<br \/>\n            elif [ &#8220;${lib#\/lib\/}&#8221; != &#8220;$lib&#8221; ]; then \\<br \/>\n                cp &#8220;$lib&#8221; \/dependencies\/lib\/; \\<br \/>\n            fi; \\<br \/>\n        fi; \\<br \/>\n    done<\/p>\n<p># Final stage (alpine)<br \/>\n# &#8212;&#8212;&#8212;&#8212;-<br \/>\nFROM alpine:3.19 AS alpine-version<\/p>\n<p>ENV NODE_NO_WARNINGS=1<\/p>\n<p># Install c++ dependencies<br \/>\nRUN apk update &amp;&amp; apk upgrade &amp;&amp; \\<br \/>\n    apk add &#8211;no-cache \\<br \/>\n    libstdc++=~13.2 \\<br \/>\n    &amp;&amp; rm -rf \/tmp\/* \/var\/cache\/apk\/*<\/p>\n<p>COPY &#8211;from=builder \/bin\/dclint \/bin\/dclint<\/p>\n<p>WORKDIR \/app<\/p>\n<p>ENTRYPOINT [&#8220;\/bin\/dclint&#8221;]\n<p># Final stage (scratch)<br \/>\n# &#8212;&#8212;&#8212;&#8212;-<br \/>\nFROM scratch AS scratch-version<\/p>\n<p>ENV NODE_NO_WARNINGS=1<\/p>\n<p># Copy dependencies<br \/>\nCOPY &#8211;from=builder \/dependencies\/lib \/lib<br \/>\nCOPY &#8211;from=builder \/dependencies\/usr\/lib \/usr\/lib<\/p>\n<p># Copy binary<br \/>\nCOPY &#8211;from=builder \/bin\/dclint \/bin\/dclint<\/p>\n<p>WORKDIR \/app<\/p>\n<p>ENTRYPOINT [&#8220;\/bin\/dclint&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>Dockerfile \u0631\u0627 \u062f\u0631 GitHub \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p>  GitHub<\/p>\n<p>\u0628\u0627 \u062e\u0637 \u0644\u0648\u0644\u0647 GitHub \u0645\u0646 \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u0628\u0647 \u062f\u0648 \u0647\u062f\u0641 \u0628\u0631\u0633\u0645:  <\/p>\n<p>\u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u06cc\u062f alpine \u0648 scratch \u0646\u0633\u062e\u0647 \u0647\u0627 (\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0647\u0631 \u062f\u0648 amd64 \u0648 arm64) \u0628\u0647 \u062f\u0627\u06a9\u0631 \u0647\u0627\u0628.<\/p>\n<p>\u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc Alpine\/Ubuntu (\u0647\u0645\u0686\u0646\u06cc\u0646 amd64 \u0648 arm64) \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062f\u0627\u0631\u0627\u06cc\u06cc \u0647\u0627\u06cc \u0646\u0633\u062e\u0647 \u0647\u0627\u06cc GitHub.<\/p>\n<p>  \u0627\u0646\u062a\u0634\u0627\u0631 \u062f\u0631 Docker Hub<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u0634\u0627\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062f\u0631 Docker Hub\u060c \u0627\u0632 docker\/build-push-action@v6 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0645:  <\/p>\n<p>\u0647\u062f\u0641: \u06a9\u062f\u0627\u0645 \u062a\u0635\u0648\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc \u0645\u0646\u062a\u0634\u0631 \u0634\u0648\u062f.<\/p>\n<p>\u067e\u0644\u062a \u0641\u0631\u0645: \u067e\u0644\u062a\u0641\u0631\u0645 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646.<\/p>\n<p>\u0628\u0631\u0686\u0633\u0628 \u0647\u0627: \u0628\u0631\u0686\u0633\u0628 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0632\u06cc\u0631 \u0622\u0646\u0647\u0627 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0639\u0645\u0644 \u062f\u0648 \u0628\u0627\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f &#8211; \u0628\u0631\u0627\u06cc alpine \u0646\u0633\u062e\u0647 \u0648 \u0628\u0631\u0627\u06cc scratch \u0646\u0633\u062e\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0628\u0631\u0627\u06cc scratch \u0646\u0633\u062e\u0647:<\/p>\n<p>jobs:<br \/>\n  release:<br \/>\n    runs-on: ubuntu-latest<br \/>\n    steps:<br \/>\n      &#8211; &#8230;<br \/>\n      &#8211; name: Build and push Scratch version<br \/>\n        uses: docker\/build-push-action@v6<br \/>\n        with:<br \/>\n          context: .<br \/>\n          push: true<br \/>\n          platforms: linux\/amd64,linux\/arm64<br \/>\n          tags: |<br \/>\n            ${{ secrets.DOCKERHUB_USERNAME }}\/dclint:latest<br \/>\n            ${{ secrets.DOCKERHUB_USERNAME }}\/dclint:${{ env.BUILD_VERSION }}<br \/>\n          target: scratch-version<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0633\u0627\u062e\u062a \u0628\u0627\u06cc\u0646\u0631\u06cc<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0647\u0627\u06cc \u0628\u0627\u06cc\u0646\u0631\u06cc\u060c \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 \u0645\u0627\u062a\u0631\u06cc\u0633 \u0645\u06cc \u0633\u0627\u0632\u062f (\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0645\u0627\u062a\u0631\u06cc\u0633 \u0627\u0642\u062f\u0627\u0645\u0627\u062a GitHub) \u062f\u0631 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631. \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0647\u0645\u0632\u0645\u0627\u0646 \u067e\u0644\u062a\u0641\u0631\u0645 \u0647\u0627 \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<p>jobs:<br \/>\n  build_sea:<br \/>\n    runs-on: ubuntu-latest<br \/>\n    strategy:<br \/>\n      matrix:<br \/>\n        os: [alpine, bullseye]\n        arch: [amd64, arm64]\n    steps:<br \/>\n      &#8211; &#8230;<br \/>\n      &#8211; name: Build binary<br \/>\n        run: |<br \/>\n          docker run &#8211;rm &#8211;platform linux\/${{ matrix.arch }} -v &#8220;$PWD&#8221;:\/app -w \/app node:20.18.0-${{ matrix.os }} .\/scripts\/generate-sea.sh .\/sea\/dclint-${{ matrix.os }}-${{ matrix.arch }}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0637 \u0644\u0648\u0644\u0647 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:\u0641\u0627\u06cc\u0644 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 GitHub  <\/p>\n<p>  \u0627\u0641\u0632\u0648\u062f\u0646 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0647 \u0646\u0633\u062e\u0647 \u0647\u0627<\/p>\n<p>\u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0647 \u0646\u0633\u062e\u0647 \u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f semantic-release\u060c \u0627\u06af\u0631\u0686\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0634 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0646\u06cc\u0632 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f.  <\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0628\u062e\u0634\u06cc \u0627\u0632 release.config.js \u0645\u0633\u0626\u0648\u0644 \u067e\u06cc\u0648\u0633\u062a \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u0647\u0627:<\/p>\n<p>export default {<br \/>\n  &#8230;<br \/>\n  plugins: [<br \/>\n    &#8230;<br \/>\n    [<br \/>\n      &#8216;@semantic-release\/github&#8217;,<br \/>\n      {<br \/>\n        assets: [<br \/>\n          {<br \/>\n            path: &#8216;README.md&#8217;,<br \/>\n            label: &#8216;Documentation&#8217;,<br \/>\n          },<br \/>\n          {<br \/>\n            path: &#8216;CHANGELOG.md&#8217;,<br \/>\n            label: &#8216;Changelog&#8217;,<br \/>\n          },<br \/>\n          {<br \/>\n            path: &#8216;sea\/dclint-alpine-amd64&#8217;,<br \/>\n            label: &#8216;DClint Alpine Linux Binary (amd64)&#8217;,<br \/>\n          },<br \/>\n          {<br \/>\n            path: &#8216;sea\/dclint-bullseye-amd64&#8217;,<br \/>\n            label: &#8216;DClint Bullseye Linux Binary (amd64)&#8217;,<br \/>\n          },<br \/>\n          {<br \/>\n            path: &#8216;sea\/dclint-alpine-arm64&#8217;,<br \/>\n            label: &#8216;DClint Alpine Linux Binary (arm64)&#8217;,<br \/>\n          },<br \/>\n          {<br \/>\n            path: &#8216;sea\/dclint-bullseye-arm64&#8217;,<br \/>\n            label: &#8216;DClint Bullseye Linux Binary (arm64)&#8217;,<br \/>\n          },<br \/>\n        ],<br \/>\n      },<br \/>\n    ],<br \/>\n  ],<br \/>\n};<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>Release.config.js \u0631\u0627 \u062f\u0631 GitHub \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<p>  \u0627\u0641\u06a9\u0627\u0631 \u0646\u0647\u0627\u06cc\u06cc<\/p>\n<p>\u062f\u0631 \u062d\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0631 \u0631\u0648\u06cc dclint\u060c \u0628\u0627 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0631\u0648\u0628\u0631\u0648 \u0634\u062f\u0645 \u06a9\u0647 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0633\u0627\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u06cc\u062f\u0646\u062f \u0627\u0645\u0627 \u0628\u0647 \u0633\u0631\u0639\u062a \u062a\u0628\u062f\u06cc\u0644 \u0628\u0647 \u0686\u0627\u0644\u0634 \u0647\u0627\u06cc \u062c\u0627\u0644\u0628\u06cc \u0634\u062f\u0646\u062f. <\/p>\n<p>\u0627\u06cc\u0646 \u0686\u0627\u0644\u0634 \u0647\u0627 \u0628\u0647 \u0645\u0646 \u062a\u062c\u0631\u0628\u06cc\u0627\u062a \u0627\u0631\u0632\u0634\u0645\u0646\u062f\u06cc \u062f\u0627\u062f \u0648 \u0628\u0647 \u0633\u0627\u062e\u062a\u0646 \u0622\u0646 \u06a9\u0645\u06a9 \u06a9\u0631\u062f dclint \u0627\u0628\u0632\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062a\u0631: \u0628\u062f\u0648\u0646 Node.js \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f\u060c \u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0627\u0632 \u0637\u0631\u06cc\u0642 Docker \u06cc\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0633\u062a\u0642\u0644 \u0646\u0635\u0628 \u0634\u0648\u062f.  <\/p>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646 \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0647\u0627\u060c \u0645\u0646 \u062a\u0648\u0627\u0646\u0633\u062a\u0645 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u0631\u0627 \u0628\u0647 \u0645\u06cc\u0632\u0627\u0646 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u06a9\u0627\u0647\u0634 \u062f\u0647\u0645:  <\/p>\n<p>\u0627\u0646\u062f\u0627\u0632\u0647 \u0641\u0634\u0631\u062f\u0647 \u062a\u0635\u0648\u06cc\u0631 Docker \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0622\u0644\u067e\u0627\u06cc\u0646 \u06a9\u0627\u0647\u0634 \u06cc\u0627\u0641\u062a 93 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a \u0628\u0647 43 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u062e\u0631\u0627\u0634\u060c \u0627\u0646\u062f\u0627\u0632\u0647 \u0627\u0633\u062a 38 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a.<\/p>\n<p>\u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0647\u0645\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u062e\u0632\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f. \u0645\u0646 \u0627\u0632 \u0633\u062a\u0627\u0631\u0647 \u0647\u0627\u06cc \u0634\u0645\u0627 \u0648 \u0647\u0631 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0642\u062f\u0631\u062f\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u0645.  <\/p>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0634\u062a\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u067e\u06cc \u067e\u0627\u0644 \u0627\u0632 \u0645\u0646 \u062d\u0645\u0627\u06cc\u062a \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u0645\u0646 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<div data-article-id=\"2129263\" id=\"article-body\">\n<p>\u0646\u0627\u0645 \u0645\u0646 \u0633\u0631\u06af\u0626\u06cc \u0627\u0633\u062a \u0648 \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 dclint\u060c \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 CLI \u0628\u0631\u0627\u06cc \u067e\u0631 \u06a9\u0631\u062f\u0646 \u0648 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc Docker Compose \u0647\u0633\u062a\u0645.<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0646\u062d\u0648\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0627\u0628\u0632\u0627\u0631 Node.js CLI \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f \u06a9\u0647:<\/p>\n<ul>\n<li>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0645\u0633\u062a\u0642\u0644 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0635\u0628 Node.js \u0646\u062f\u0627\u0631\u062f.<\/li>\n<li>\u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc (arm64\/amd64) \u0648 \u0633\u06cc\u0633\u062a\u0645 \u0639\u0627\u0645\u0644 (Alpine\/Ubuntu) \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u062f\u0631 \u062e\u0637\u0648\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0627\u062f\u063a\u0627\u0645 \u0634\u0648\u062f.<\/li>\n<\/ul>\n<p>\u0645\u0627 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627 \u067e\u0648\u0634\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Node.js Single Executable Applications (SEA)\u060c \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc Rollup \u0628\u0631\u0627\u06cc \u0628\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc\u060c \u0633\u0627\u062e\u062a \u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u0628\u0647\u06cc\u0646\u0647\u200c\u0633\u0627\u0632\u06cc \u0634\u062f\u0647\u060c \u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0627\u0646\u062a\u0634\u0627\u0631 \u0628\u0627 GitHub Actions.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%DA%A9%D9%85%DB%8C_%D8%B2%D9%85%DB%8C%D9%86%D9%87\" >\u06a9\u0645\u06cc \u0632\u0645\u06cc\u0646\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%DA%86%D9%87_%DA%AF%D8%B2%DB%8C%D9%86%D9%87_%D9%87%D8%A7%DB%8C%DB%8C_%D8%AF%D8%A7%D8%B1%D9%85\" >\u0686\u0647 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc\u06cc \u062f\u0627\u0631\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#Single_Executable_Applications_API\" >Single Executable Applications API<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%AC%D9%85%D8%B9_%D8%A2%D9%88%D8%B1%DB%8C\" >\u062c\u0645\u0639 \u0622\u0648\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%AF%D8%A7%DA%A9%D8%B1\" >\u062f\u0627\u06a9\u0631<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%A8%D8%A7_Docker_%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0628\u0627 Docker \u0628\u0627\u06cc\u0646\u0631\u06cc \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%AA%D8%B5%D9%88%DB%8C%D8%B1_%D8%AF%D8%A7%DA%A9%D8%B1\" >\u0627\u06cc\u062c\u0627\u062f \u062a\u0635\u0648\u06cc\u0631 \u062f\u0627\u06a9\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%B1%D8%B3%DB%8C%D8%AF%DA%AF%DB%8C_%D8%A8%D9%87_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87\" >\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#GitHub\" >GitHub<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%A7%D9%86%D8%AA%D8%B4%D8%A7%D8%B1_%D8%AF%D8%B1_Docker_Hub\" >\u0627\u0646\u062a\u0634\u0627\u0631 \u062f\u0631 Docker Hub<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C\" >\u0633\u0627\u062e\u062a \u0628\u0627\u06cc\u0646\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C_%D8%A8%D9%87_%D9%86%D8%B3%D8%AE%D9%87_%D9%87%D8%A7\" >\u0627\u0641\u0632\u0648\u062f\u0646 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0647 \u0646\u0633\u062e\u0647 \u0647\u0627<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/how-to-build-multi-platform-executable-binaries-in-nodejs-with-sea-rollup-docker-and-github-d0g\/#%D8%A7%D9%81%DA%A9%D8%A7%D8%B1_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\" >\u0627\u0641\u06a9\u0627\u0631 \u0646\u0647\u0627\u06cc\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D9%85%DB%8C_%D8%B2%D9%85%DB%8C%D9%86%D9%87\"><\/span>\n<p>  \u06a9\u0645\u06cc \u0632\u0645\u06cc\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>\u062f\u06cc\u06a9\u0644\u06cc\u0646\u062a<\/strong> \u062f\u0631 TypeScript \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u0627\u06cc\u0646 \u0632\u0628\u0627\u0646\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0646 \u0628\u0627 \u0622\u0646 \u0631\u0627\u062d\u062a \u062a\u0631 \u0647\u0633\u062a\u0645 \u0648 \u0645\u062f\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u062f\u0631 \u0630\u0647\u0646 \u062f\u0627\u0634\u062a\u0645 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0628\u0648\u062f:<\/p>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0627 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc Docker Compose \u0633\u0631 \u0648 \u06a9\u0627\u0631 \u062f\u0627\u0631\u06cc\u0645\u060c Docker \u0642\u0628\u0644\u0627\u064b \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0648\u0632\u06cc\u0639 \u0627\u0628\u0632\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u062f\u0627\u06a9\u0631 \u0627\u06cc\u0646 \u0633\u0648\u0627\u0644 \u0631\u0627 \u062d\u0644 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u06a9\u062f\u0627\u0645 \u0632\u0628\u0627\u0646 \u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u062f\u0627\u06a9\u0631 \u062a\u0646\u0647\u0627 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0627\u0633\u062a. \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc Node.js\u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0622\u0646 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0622\u0646 \u0646\u06cc\u0632 \u0627\u062c\u0631\u0627 \u06a9\u0646\u0646\u062f <code>npx<\/code>.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 (\u0648 \u0627\u06cc\u0646 \u0632\u06cc\u0628\u0627\u06cc\u06cc \u0645\u0646\u0628\u0639 \u0628\u0627\u0632 \u0627\u0633\u062a)\u060c \u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0648\u0634 \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u06a9\u0631\u062f:<\/p>\n<blockquote>\n<p>\u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646\u060c \u0645\u0627 \u0627\u0628\u0632\u0627\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062a\u062e\u0635\u0635\u06cc \u062c\u0645\u0639\u200c\u0622\u0648\u0631\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u0628\u0627 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u062c\u0645\u0639\u200c\u0634\u062f\u0647 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645 \u062a\u0627 \u0627\u062c\u0631\u0627\u06a9\u0646\u0646\u062f\u0647\u200c\u0647\u0627\u06cc CI\/CD \u0645\u0627 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0632\u06cc\u0627\u062f\u06cc \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f \u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0628\u0627 \u06a9\u0645\u062a\u0631\u06cc\u0646 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0634 \u06a9\u0646\u0646\u062f.\u00bb<\/p>\n<p>&#8211; <strong>\u0622\u062f\u0627\u0645 \u0644\u06cc\u0632\u06a9\u0627\u06cc<\/strong> \u062f\u0631 \u0628\u062d\u062b GitHub<\/p>\n<\/blockquote>\n<p>\u0648 \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0634\u062f \u0628\u0647 \u0641\u06a9\u0631 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0645 \u0628\u0627\u0634\u0645 \u06a9\u0647 \u0627\u0635\u0644\u0627\u064b \u0628\u0647 Node.js \u0648\u0627\u0628\u0633\u062a\u0647 \u0646\u0628\u0627\u0634\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0647\u062f\u0627\u0641 \u0645\u0646 \u0627\u06cc\u0646 \u0628\u0648\u062f:<\/p>\n<ul>\n<li>\u06cc\u06a9 \u0641\u0631\u0622\u06cc\u0646\u062f \u0633\u0627\u062e\u062a \u0648\u0627\u0636\u062d \u0648 \u0633\u0631\u0631\u0627\u0633\u062a.<\/li>\n<li>\u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062a\u0627 \u062d\u062f \u0627\u0645\u06a9\u0627\u0646 \u06a9\u0648\u0686\u06a9.<\/li>\n<li>\u0633\u0627\u0632\u06af\u0627\u0631\u06cc \u0628\u0627 \u062d\u062f\u0627\u0642\u0644 \u0627\u0648\u0628\u0648\u0646\u062a\u0648 \u0648 \u0622\u0644\u067e\u0627\u06cc\u0646.<\/li>\n<li>\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0647\u0631 \u062f\u0648 \u0645\u0639\u0645\u0627\u0631\u06cc arm64 \u0648 amd64.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D9%87_%DA%AF%D8%B2%DB%8C%D9%86%D9%87_%D9%87%D8%A7%DB%8C%DB%8C_%D8%AF%D8%A7%D8%B1%D9%85\"><\/span>\n<p>  \u0686\u0647 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc\u06cc \u062f\u0627\u0631\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0686\u0646\u062f\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627\u06cc \u0645\u0633\u062a\u0642\u0644 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<p>\u0647\u0631 \u062f\u0648 \u0627\u0628\u0632\u0627\u0631 \u0628\u0627 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0648 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0628 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646\u060c \u0647\u0645\u0647 \u0686\u06cc\u0632 \u0622\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u06a9\u0627\u0631 \u0646\u06a9\u0631\u062f.<\/p>\n<p>\u0627\u06af\u0631\u0686\u0647 \u0646\u0633\u0628\u062a\u0627\u064b \u0627\u062e\u06cc\u0631\u0627\u064b \u062f\u0631 <strong>Node.js 21<\/strong> API \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc \u0645\u0646\u0641\u0631\u062f \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f\u0646\u062f<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631\u060c \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 1.1 \u0627\u0633\u062a\u060c \u06cc\u0639\u0646\u06cc \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 <strong>&#8220;\u062a\u062c\u0631\u0628\u06cc. \u062a\u0648\u0633\u0639\u0647 \u0641\u0639\u0627\u0644.\u00bb<\/strong> \u0627\u0645\u0627 \u0645\u0646 \u0627\u0632 \u06a9\u0634\u0641 \u0631\u0648\u06cc\u06a9\u0631\u062f\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0644\u0630\u062a \u0645\u06cc \u0628\u0631\u0645\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062a\u0635\u0645\u06cc\u0645 \u06af\u0631\u0641\u062a\u0645 \u0622\u0646 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u0645.<\/p>\n<p><em>\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0622\u0646 \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f. \u0627\u06af\u0631 \u062a\u0631\u062c\u06cc\u062d \u0645\u06cc \u062f\u0647\u06cc\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0648\u0627\u0631\u062f \u06a9\u062f \u0634\u0648\u06cc\u062f\u060c \u0645\u062e\u0632\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0648 \u0641\u0631\u0627\u0645\u0648\u0634 \u0646\u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u06af\u0631 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0631\u06cc\u062f\u060c \u06cc\u06a9 \u0633\u062a\u0627\u0631\u0647 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f!<\/em><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Single_Executable_Applications_API\"><\/span>\n<p>  Single Executable Applications API<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc \u0627\u06cc\u0646 \u06cc\u06a9 Node.js API \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<blockquote>\n<p>\u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Node.js \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645\u06cc \u06a9\u0647 Node.js \u0646\u0635\u0628 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u062a\u0648\u0632\u06cc\u0639 \u06a9\u0646\u062f.<br \/>\u0648\u06cc\u0698\u06af\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0645\u0646\u0641\u0631\u062f \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u062a\u0646\u0647\u0627 \u0627\u0632 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0627\u0698\u0648\u0644 CommonJS \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a Node.js<\/p>\n<\/blockquote>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0639\u0627\u0644\u06cc \u0647\u0633\u062a\u0646\u062f \u0648 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0627\u062c\u0631\u0627\u06cc\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f\u060c \u06cc\u06a9 \u067e\u0648\u0633\u062a\u0647 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0647 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0645 <code>generate-sea.sh<\/code>. \u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0644\u0627\u0632\u0645 \u0631\u0627 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0622\u0633\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"c\">#!\/bin\/sh<\/span>\n\n<span class=\"c\"># Checking that the path to the generation file is passed as an argument<\/span>\n<span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-z<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$1<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then\n  <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"Usage: <\/span><span class=\"nv\">$0<\/span><span class=\"s2\"> <path_to_generation_file>\"<\/path_to_generation_file><\/span>\n  <span class=\"nb\">exit <\/span>1\n<span class=\"k\">fi\n\n<\/span><span class=\"nv\">GENERATION_PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"<\/span><span class=\"nv\">$1<\/span><span class=\"s2\">\"<\/span>\n\n<span class=\"c\"># Generate binary<\/span>\n<span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$GENERATION_PATH<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> sea-prep.blob <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\n<span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">$(<\/span><span class=\"nb\">dirname<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$GENERATION_PATH<\/span><span class=\"s2\">\"<\/span><span class=\"si\">)<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\nnode <span class=\"nt\">--experimental-sea-config<\/span> sea-config.json <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\n<span class=\"nb\">cp<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">$(<\/span><span class=\"nb\">command<\/span> <span class=\"nt\">-v<\/span> node<span class=\"si\">)<\/span><span class=\"s2\">\"<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$GENERATION_PATH<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\<\/span>\nnpx <span class=\"nt\">-y<\/span> postject <span class=\"s2\">\"<\/span><span class=\"nv\">$GENERATION_PATH<\/span><span class=\"s2\">\"<\/span> NODE_SEA_BLOB sea-prep.blob <span class=\"nt\">--sentinel-fuse<\/span> NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc\u060c \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u0645\u0633\u06cc\u0631 \u062e\u0631\u0648\u062c\u06cc \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>.\/scripts\/generate-sea.sh .\/bin\/dclint\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0630\u06a9\u0631 \u0634\u062f\u060c SEA \u0641\u0642\u0637 \u0628\u0627 \u06cc\u06a9 \u062a\u06a9 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f <strong>\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0627\u0698\u0648\u0644 CommonJS<\/strong>. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646\u060c \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0628\u0647 \u06cc\u06a9 \u0628\u0627\u0646\u062f\u0644\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u062a\u0627 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 CommonJS\u060c \u0634\u0627\u0645\u0644 \u062a\u0645\u0627\u0645 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627 \u0627\u0632 <code>node_modules<\/code>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AC%D9%85%D8%B9_%D8%A2%D9%88%D8%B1%DB%8C\"><\/span>\n<p>  \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0645 <strong>\u062c\u0645\u0639 \u0622\u0648\u0631\u06cc<\/strong> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0628\u0627\u0646\u062f\u0644\u0631 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0647\u0646\u06af\u0627\u0645 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u062f \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0628\u0627\u0646\u062f\u0644\u0631 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a <strong>\u062f\u0631\u062e\u062a \u062a\u06a9\u0627\u0646 \u062f\u0627\u062f\u0646<\/strong> (\u062d\u0630\u0641 \u06a9\u062f\u0647\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0634\u062f\u0647). Rollup \u0627\u06cc\u0646 \u0642\u0627\u0628\u0644\u06cc\u062a \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.  <\/p>\n<blockquote>\n<p>Rollup \u06cc\u06a9 \u0628\u0633\u062a\u0647 \u0645\u0627\u0698\u0648\u0644 \u0628\u0631\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0627\u0633\u062a \u06a9\u0647 \u0642\u0637\u0639\u0627\u062a \u06a9\u0648\u0686\u06a9\u06cc \u0627\u0632 \u06a9\u062f \u0631\u0627 \u062f\u0631 \u0686\u06cc\u0632\u06cc \u0628\u0632\u0631\u06af\u062a\u0631 \u0648 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062a\u0631 \u0645\u0627\u0646\u0646\u062f \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u0633\u0646\u0627\u062f \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc  <\/p>\n<\/blockquote>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0646\u062a\u06cc\u062c\u0647 \u062f\u0644\u062e\u0648\u0627\u0647\u060c \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 Rollup \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight jsx\"><code><span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"p\">{<\/span>\n  <span class=\"p\">...<\/span><span class=\"nf\">baseConfig<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">pkg<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"kc\">false<\/span><span class=\"p\">,<\/span> <span class=\"kc\">false<\/span><span class=\"p\">),<\/span> <span class=\"c1\">\/\/ Import a shared base config<\/span>\n  <span class=\"na\">input<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">src\/cli\/cli.ts<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n  <span class=\"na\">output<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n    <span class=\"na\">file<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">pkg\/dclint.cjs<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">format<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">cjs<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">inlineDynamicImports<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">exports<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">auto<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n  <span class=\"p\">},<\/span>\n  <span class=\"na\">context<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">globalThis<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u067e\u0627\u06cc\u0647 \u0645\u0634\u062a\u0631\u06a9\u060c \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc TypeScript\u060c JSON \u0648 \u0633\u0627\u06cc\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc\u200c\u0647\u0627\u06cc \u062e\u0627\u0635 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.  <\/p>\n<p>\u0628\u0631 \u062e\u0644\u0627\u0641 \u0633\u0627\u06cc\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0627\u062e\u062a\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0641\u0627\u0648\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:  <\/p>\n<ul>\n<li>\n<strong>inlineDynamicImports: \u062f\u0631\u0633\u062a \u0627\u0633\u062a<\/strong> &#8211; \u062a\u0645\u0627\u0645 \u0645\u0646\u0637\u0642 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0648\u0627\u062d\u062f \u062c\u0645\u0639 \u0645\u06cc \u0634\u0648\u062f\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 \u06a9\u062f \u0627\u0632 \u0648\u0627\u0631\u062f\u0627\u062a \u067e\u0648\u06cc\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f.\n<\/li>\n<li>\n<strong>\u0641\u0631\u0645\u062a: &#39;cjs&#39;<\/strong> &#8211; \u0641\u0631\u0645\u062a \u0628\u0627\u0646\u062f\u0644 \u062e\u0631\u0648\u062c\u06cc \u0627\u0633\u062a <strong>CommonJS<\/strong>.\n<\/li>\n<li>\n<strong>\u062e\u06cc\u0631 <code>external<\/code> \u0645\u06cc\u062f\u0627\u0646<\/strong> &#8211; \u0647\u0645\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0647\u0645\u0631\u0627\u0647 \u0647\u0633\u062a\u0646\u062f.\n<\/li>\n<\/ul>\n<p>\u0646\u062a\u06cc\u062c\u0647 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a 10 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a\u06cc \u0628\u0648\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0627 SEA\u060c \u062d\u062c\u0645 \u0641\u0627\u06cc\u0644 \u0628\u0647 100 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a \u0627\u0641\u0632\u0627\u06cc\u0634 \u06cc\u0627\u0641\u062a. \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0646\u0633\u0628\u062a\u0627 \u0633\u0627\u062f\u0647 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0632\u0631\u06af \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0645\u0646 \u062e\u0648\u0628 \u0627\u0633\u062a. <\/p>\n<p>\u0648 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u06a9\u0627\u0645\u0644\u0627\u064b \u062e\u0648\u062f\u06a9\u0641\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a. <strong>\u06cc\u0627 \u0647\u0633\u062a\u061f<\/strong>  <\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D8%A7%DA%A9%D8%B1\"><\/span>\n<p>  \u062f\u0627\u06a9\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 SEA \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0648\u0645\u06cc \u0627\u0632 \u0633\u0627\u062e\u062a\u0646 \u0628\u0631\u0627\u06cc \u067e\u0644\u062a\u0641\u0631\u0645\u200c\u0647\u0627 \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0628\u0647 \u0645\u062d\u06cc\u0637\u06cc \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f \u0645\u062a\u06a9\u06cc \u0627\u0633\u062a &#8211; \u062f\u0627\u06a9\u0631 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u200c\u0647\u0627\u06cc \u0686\u0646\u062f \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.<\/p>\n<blockquote>\n<p>Docker \u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u0628\u0627\u0632 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647\u060c \u062d\u0645\u0644 \u0648 \u0646\u0642\u0644 \u0648 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0627\u0633\u062a.<br \/>Docker \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u0648 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u06a9\u0627\u0645\u0644\u0627\u064b \u0627\u06cc\u0632\u0648\u0644\u0647 \u0628\u0647 \u0646\u0627\u0645 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u062f\u0627\u06a9\u0631<\/p>\n<\/blockquote>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A8%D8%A7_Docker_%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0628\u0627 Docker \u0628\u0627\u06cc\u0646\u0631\u06cc \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646 <code>generate-sea.sh<\/code> \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0627\u06cc\u062f \u062f\u0631 \u0647\u0645\u0627\u0646 \u0645\u062d\u06cc\u0637\u06cc \u06a9\u0647 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u0627\u062c\u0631\u0627 \u0634\u0648\u062f.  <\/p>\n<p>\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u0648\u0628\u0648\u0646\u062a\u0648 (arm64)\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u0645 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>docker run <span class=\"nt\">--rm<\/span> <span class=\"nt\">--platform<\/span> linux\/arm64 <span class=\"nt\">-v<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$PWD<\/span><span class=\"s2\">\"<\/span>:\/app <span class=\"nt\">-w<\/span> \/app node:20.18.0-bullseye .\/scripts\/generate-sea.sh .\/sea\/dclint-bullseye-arm64\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0648\u0636\u06cc\u062d:<\/p>\n<ul>\n<li>\n<code>--platform linux\/arm64<\/code>  \u0645\u0639\u0645\u0627\u0631\u06cc \u0647\u062f\u0641 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<code>node:20.18.0-bullseye<\/code>  \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 Docker Node.js \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 \u0627\u0648\u0628\u0648\u0646\u062a\u0648 \u0633\u0627\u0632\u06af\u0627\u0631 \u0627\u0633\u062a.\n<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D8%AA%D8%B5%D9%88%DB%8C%D8%B1_%D8%AF%D8%A7%DA%A9%D8%B1\"><\/span>\n<p>  \u0627\u06cc\u062c\u0627\u062f \u062a\u0635\u0648\u06cc\u0631 \u062f\u0627\u06a9\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u062a\u0648\u0644\u06cc\u062f \u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627\u060c \u0627\u0628\u0632\u0627\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 Docker \u062a\u0648\u0632\u06cc\u0639 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u06cc\u06a9 <code>Dockerfile<\/code> \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0638\u0631\u0641 \u0646\u0647\u0627\u06cc\u06cc \u0645\u0646 \u0627\u0632 a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 <strong>\u0633\u0627\u062e\u062a \u0686\u0646\u062f \u0645\u0631\u062d\u0644\u0647 \u0627\u06cc<\/strong> \u0628\u0631\u0627\u06cc \u0628\u0647 \u062d\u062f\u0627\u0642\u0644 \u0631\u0633\u0627\u0646\u062f\u0646 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0627\u0648\u0644\u060c \u0628\u0627\u06cc\u0646\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>generate-sea.sh<\/code> \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<br \/>\u0648 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0622\u062e\u0631 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0631\u0627 \u06a9\u067e\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u0631\u0627 \u067e\u0634\u062a \u0633\u0631 \u0645\u06cc \u06af\u0630\u0627\u0631\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0645\u0631\u062d\u0644\u0647 \u0622\u062e\u0631 \u0627\u0632 \u062f\u0648 \u0646\u0648\u0639 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645: <strong>\u0622\u0644\u067e\u0627\u06cc\u0646<\/strong> \u0648 <strong>\u062e\u0631\u0627\u0634<\/strong>.<\/p>\n<blockquote>\n<p>Alpine \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0627\u06cc\u0647 \u062d\u062f\u0627\u0642\u0644 (~ 5 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a)\u060c \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0641\u0636\u0627\u06cc \u06a9\u0645\u06cc \u0648 \u0627\u0645\u0646\u06cc\u062a \u0628\u06cc\u0634\u062a\u0631 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u0646\u062f. Alpine \u062f\u0631 Docker Hub<br \/>Scratch \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u067e\u0627\u06cc\u0647 \u062e\u0627\u0644\u06cc \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0647\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631 \u0633\u0628\u06a9 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc \u0645\u0633\u062a\u0642\u0644 \u0628\u0627 \u062d\u062f\u0627\u0642\u0644 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a. \u0631\u0648\u06cc \u062f\u0627\u06a9\u0631 \u0647\u0627\u0628 \u062e\u0631\u0627\u0634 \u062f\u0647\u06cc\u062f  <\/p>\n<\/blockquote>\n<p>\u0645\u062b\u0627\u0644 Dockerfile:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"c\"># First stage (builder)<\/span>\n<span class=\"c\"># -------------<\/span>\n<span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"s\">node:20.18.0-alpine3.19<\/span><span class=\"w\"> <\/span><span class=\"k\">AS<\/span><span class=\"w\"> <\/span><span class=\"s\">builder<\/span>\n\n<span class=\"c\"># Create working directory<\/span>\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/dclint<\/span>\n\n<span class=\"c\"># Copy package.json and install dependencies<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> package*.json .\/<\/span>\n<span class=\"k\">RUN <\/span>npm ci\n\n<span class=\"c\"># Copy the rest of the project<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> . .<\/span>\n\n<span class=\"c\"># Build the binary with Rollup and SEA script<\/span>\n<span class=\"k\">RUN <\/span>npm run build:pkg <span class=\"o\">&amp;&amp;<\/span> .\/scripts\/generate-sea.sh \/bin\/dclint\n\n<span class=\"c\"># Final stage (alpine)<\/span>\n<span class=\"c\"># -------------<\/span>\n<span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"s\">alpine:3.19<\/span><span class=\"w\"> <\/span><span class=\"k\">AS<\/span><span class=\"w\"> <\/span><span class=\"s\">alpine-version<\/span>\n\n<span class=\"c\"># Suppress experimental warnings<\/span>\n<span class=\"k\">ENV<\/span><span class=\"s\"> NODE_NO_WARNINGS=1<\/span>\n\n<span class=\"c\"># Copy the binary from the builder stage<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/bin\/dclint \/bin\/dclint<\/span>\n\n<span class=\"c\"># Create working directory<\/span>\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/app<\/span>\n\n<span class=\"c\"># Define the entry point<\/span>\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"\/bin\/dclint\"]<\/span>\n\n<span class=\"c\"># Final stage (scratch)<\/span>\n<span class=\"c\"># -------------<\/span>\n<span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"s\">scratch<\/span><span class=\"w\"> <\/span><span class=\"k\">AS<\/span><span class=\"w\"> <\/span><span class=\"s\">scratch-version<\/span>\n\n<span class=\"c\"># Suppress experimental warnings<\/span>\n<span class=\"k\">ENV<\/span><span class=\"s\"> NODE_NO_WARNINGS=1<\/span>\n\n<span class=\"c\"># Copy the binary from the builder stage<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/bin\/dclint \/bin\/dclint<\/span>\n\n<span class=\"c\"># Create working directory<\/span>\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/app<\/span>\n\n<span class=\"c\"># Define the entry point<\/span>\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"\/bin\/dclint\"]<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B1%D8%B3%DB%8C%D8%AF%DA%AF%DB%8C_%D8%A8%D9%87_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87\"><\/span>\n<p>  \u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0645\u0627 \u0627\u062c\u0631\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u0632 \u062a\u0635\u0648\u06cc\u0631 \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0628\u0627\u0639\u062b \u0627\u06cc\u062c\u0627\u062f \u062e\u0637\u0627\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0632\u06cc\u0631 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>Error loading shared library libstdc++.so.6: No such file or directory (needed by \/bin\/dclint)\nError relocating \/bin\/dclint: _ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev: symbol not found\n...\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u062a\u0641\u0627\u0642 \u0645\u06cc \u0627\u0641\u062a\u062f \u06a9\u0647\u060c \u062d\u062a\u06cc \u0627\u06af\u0631 Node.js \u062f\u0631 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0633\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0647\u0645\u0686\u0646\u0627\u0646 \u0628\u0647 \u0622\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f <code>libstdc++<\/code> \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u060c \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062a\u0648\u0633\u0637 <code>ldd \/bin\/dclint<\/code> \u062f\u0633\u062a\u0648\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>ldd \/bin\/dclint\n    \/lib\/ld-musl-aarch64.so.1 (0xffffaeac8000)\n    libstdc++.so.6 =&gt; \/usr\/lib\/libstdc++.so.6 (0xffff9fe00000)\n    libc.musl-aarch64.so.1 =&gt; \/lib\/ld-musl-aarch64.so.1 (0xffffaeac8000)\n    libgcc_s.so.1 =&gt; \/usr\/lib\/libgcc_s.so.1 (0xffffaea97000)\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u0644\u0628\u062a\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0646\u0647\u0627\u06cc\u06cc \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"c\"># Copy library dependencies<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/lib\/ld-musl-aarch64.so.1 \/lib\/ld-musl-aarch64.so.1<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/usr\/lib\/libgcc_s.so.1 \/usr\/lib\/libgcc_s.so.1<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/usr\/lib\/libstdc++.so.6 \/usr\/lib\/libstdc++.so.6<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u062f\u0631 \u0645\u0639\u0645\u0627\u0631\u06cc \u0647\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0633\u062a (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c arm64 \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 amd64)\u060c \u0645\u0646 \u0627\u0632 \u062e\u0631\u0648\u062c\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 <code>ldd \/bin\/dclint<\/code> \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u0648\u06cc\u0627\u060c \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u067e\u0648\u0634\u0647 \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0633\u067e\u0633 \u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"c\"># Collect platform-specific dependencies<\/span>\n<span class=\"k\">RUN <\/span><span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> \/dependencies\/lib \/dependencies\/usr\/lib <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    ldd \/bin\/dclint | <span class=\"nb\">awk<\/span> <span class=\"s1\">'{print $3}'<\/span> | <span class=\"nb\">grep<\/span> <span class=\"nt\">-vE<\/span> <span class=\"s1\">'^$'<\/span> | <span class=\"k\">while <\/span><span class=\"nb\">read<\/span> <span class=\"nt\">-r<\/span> lib<span class=\"p\">;<\/span> <span class=\"k\">do<\/span> <span class=\"se\">\\\n<\/span>        <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span> <span class=\"se\">\\\n<\/span>            <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">lib<\/span><span class=\"p\">#\/usr\/lib\/<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">!=<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span> <span class=\"se\">\\\n<\/span>                <span class=\"nb\">cp<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> \/dependencies\/usr\/lib\/<span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>            <span class=\"k\">elif<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">lib<\/span><span class=\"p\">#\/lib\/<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">!=<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span> <span class=\"se\">\\\n<\/span>                <span class=\"nb\">cp<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> \/dependencies\/lib\/<span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>            <span class=\"k\">fi<\/span><span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>        <span class=\"k\">fi<\/span><span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"k\">done<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f\u060c \u0641\u06cc\u0646\u0627\u0644 <code>Dockerfile<\/code> \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0627\u06cc\u0646 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"c\"># First stage (builder)<\/span>\n<span class=\"c\"># -------------<\/span>\n<span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"s\">node:20.18.0-alpine3.19<\/span><span class=\"w\"> <\/span><span class=\"k\">AS<\/span><span class=\"w\"> <\/span><span class=\"s\">builder<\/span>\n\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/dclint<\/span>\n\n<span class=\"k\">COPY<\/span><span class=\"s\"> package*.json .\/<\/span>\n<span class=\"k\">RUN <\/span>npm ci\n\n<span class=\"k\">COPY<\/span><span class=\"s\"> . .<\/span>\n\n<span class=\"c\"># SEA Builder<\/span>\n<span class=\"k\">RUN <\/span>npm run build:pkg <span class=\"o\">&amp;&amp;<\/span> .\/scripts\/generate-sea.sh \/bin\/dclint\n\n<span class=\"c\"># Collect platform-specific dependencies<\/span>\n<span class=\"k\">SHELL<\/span><span class=\"s\"> [\"\/bin\/ash\", \"-o\", \"pipefail\", \"-c\"]<\/span>\n<span class=\"k\">RUN <\/span><span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> \/dependencies\/lib \/dependencies\/usr\/lib <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    ldd \/bin\/dclint | <span class=\"nb\">awk<\/span> <span class=\"s1\">'{print $3}'<\/span> | <span class=\"nb\">grep<\/span> <span class=\"nt\">-vE<\/span> <span class=\"s1\">'^$'<\/span> | <span class=\"k\">while <\/span><span class=\"nb\">read<\/span> <span class=\"nt\">-r<\/span> lib<span class=\"p\">;<\/span> <span class=\"k\">do<\/span> <span class=\"se\">\\\n<\/span>        <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-f<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span> <span class=\"se\">\\\n<\/span>            <span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">lib<\/span><span class=\"p\">#\/usr\/lib\/<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">!=<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span> <span class=\"se\">\\\n<\/span>                <span class=\"nb\">cp<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> \/dependencies\/usr\/lib\/<span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>            <span class=\"k\">elif<\/span> <span class=\"o\">[<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">lib<\/span><span class=\"p\">#\/lib\/<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">!=<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> <span class=\"o\">]<\/span><span class=\"p\">;<\/span> <span class=\"k\">then<\/span> <span class=\"se\">\\\n<\/span>                <span class=\"nb\">cp<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$lib<\/span><span class=\"s2\">\"<\/span> \/dependencies\/lib\/<span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>            <span class=\"k\">fi<\/span><span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>        <span class=\"k\">fi<\/span><span class=\"p\">;<\/span> <span class=\"se\">\\\n<\/span>    <span class=\"k\">done<\/span>\n\n<span class=\"c\"># Final stage (alpine)<\/span>\n<span class=\"c\"># -------------<\/span>\n<span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"s\">alpine:3.19<\/span><span class=\"w\"> <\/span><span class=\"k\">AS<\/span><span class=\"w\"> <\/span><span class=\"s\">alpine-version<\/span>\n\n<span class=\"k\">ENV<\/span><span class=\"s\"> NODE_NO_WARNINGS=1<\/span>\n\n<span class=\"c\"># Install c++ dependencies<\/span>\n<span class=\"k\">RUN <\/span>apk update <span class=\"o\">&amp;&amp;<\/span> apk upgrade <span class=\"o\">&amp;&amp;<\/span> <span class=\"se\">\\\n<\/span>    apk add <span class=\"nt\">--no-cache<\/span> <span class=\"se\">\\\n<\/span>    libstdc++<span class=\"o\">=<\/span>~13.2 <span class=\"se\">\\\n<\/span>    <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> \/tmp\/<span class=\"k\">*<\/span> \/var\/cache\/apk\/<span class=\"k\">*<\/span>\n\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/bin\/dclint \/bin\/dclint<\/span>\n\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/app<\/span>\n\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"\/bin\/dclint\"]<\/span>\n\n<span class=\"c\"># Final stage (scratch)<\/span>\n<span class=\"c\"># -------------<\/span>\n<span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"s\">scratch<\/span><span class=\"w\"> <\/span><span class=\"k\">AS<\/span><span class=\"w\"> <\/span><span class=\"s\">scratch-version<\/span>\n\n<span class=\"k\">ENV<\/span><span class=\"s\"> NODE_NO_WARNINGS=1<\/span>\n\n<span class=\"c\"># Copy dependencies<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/dependencies\/lib \/lib<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/dependencies\/usr\/lib \/usr\/lib<\/span>\n\n<span class=\"c\"># Copy binary<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> --from=builder \/bin\/dclint \/bin\/dclint<\/span>\n\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/app<\/span>\n\n<span class=\"k\">ENTRYPOINT<\/span><span class=\"s\"> [\"\/bin\/dclint\"]<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>Dockerfile \u0631\u0627 \u062f\u0631 GitHub \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<h2><span class=\"ez-toc-section\" id=\"GitHub\"><\/span>\n<p>  GitHub<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u062e\u0637 \u0644\u0648\u0644\u0647 GitHub \u0645\u0646 \u0645\u06cc \u062e\u0648\u0627\u0633\u062a\u0645 \u0628\u0647 \u062f\u0648 \u0647\u062f\u0641 \u0628\u0631\u0633\u0645:  <\/p>\n<ol>\n<li>\u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u06cc\u062f <code>alpine<\/code> \u0648 <code>scratch<\/code> \u0646\u0633\u062e\u0647 \u0647\u0627 (\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0647\u0631 \u062f\u0648 <code>amd64<\/code> \u0648 <code>arm64<\/code>) \u0628\u0647 \u062f\u0627\u06a9\u0631 \u0647\u0627\u0628.\n<\/li>\n<li>\u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc Alpine\/Ubuntu (\u0647\u0645\u0686\u0646\u06cc\u0646 <code>amd64<\/code> \u0648 <code>arm64<\/code>) \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062f\u0627\u0631\u0627\u06cc\u06cc \u0647\u0627\u06cc \u0646\u0633\u062e\u0647 \u0647\u0627\u06cc GitHub.\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D9%86%D8%AA%D8%B4%D8%A7%D8%B1_%D8%AF%D8%B1_Docker_Hub\"><\/span>\n<p>  \u0627\u0646\u062a\u0634\u0627\u0631 \u062f\u0631 Docker Hub<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u0634\u0627\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062f\u0631 Docker Hub\u060c \u0627\u0632 docker\/build-push-action@v6 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0645\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u0645:  <\/p>\n<ul>\n<li>\n<strong>\u0647\u062f\u0641<\/strong>: \u06a9\u062f\u0627\u0645 \u062a\u0635\u0648\u06cc\u0631 \u0646\u0647\u0627\u06cc\u06cc \u0645\u0646\u062a\u0634\u0631 \u0634\u0648\u062f.\n<\/li>\n<li>\n<strong>\u067e\u0644\u062a \u0641\u0631\u0645<\/strong>: \u067e\u0644\u062a\u0641\u0631\u0645 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646.\n<\/li>\n<li>\n<strong>\u0628\u0631\u0686\u0633\u0628 \u0647\u0627<\/strong>: \u0628\u0631\u0686\u0633\u0628 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0632\u06cc\u0631 \u0622\u0646\u0647\u0627 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc \u0634\u0648\u062f.\n<\/li>\n<\/ul>\n<p>\u0627\u06cc\u0646 \u0639\u0645\u0644 \u062f\u0648 \u0628\u0627\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f &#8211; \u0628\u0631\u0627\u06cc <code>alpine<\/code> \u0646\u0633\u062e\u0647 \u0648 \u0628\u0631\u0627\u06cc <code>scratch<\/code> \u0646\u0633\u062e\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0628\u0631\u0627\u06cc <code>scratch<\/code> \u0646\u0633\u062e\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">jobs<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">release<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">runs-on<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ubuntu-latest<\/span>\n    <span class=\"na\">steps<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">...<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Build and push Scratch version<\/span>\n        <span class=\"na\">uses<\/span><span class=\"pi\">:<\/span> <span class=\"s\">docker\/build-push-action@v6<\/span>\n        <span class=\"na\">with<\/span><span class=\"pi\">:<\/span>\n          <span class=\"na\">context<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.<\/span>\n          <span class=\"na\">push<\/span><span class=\"pi\">:<\/span> <span class=\"kc\">true<\/span>\n          <span class=\"na\">platforms<\/span><span class=\"pi\">:<\/span> <span class=\"s\">linux\/amd64,linux\/arm64<\/span>\n          <span class=\"na\">tags<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\n            <span class=\"s\">${{ secrets.DOCKERHUB_USERNAME }}\/dclint:latest<\/span>\n            <span class=\"s\">${{ secrets.DOCKERHUB_USERNAME }}\/dclint:${{ env.BUILD_VERSION }}<\/span>\n          <span class=\"na\">target<\/span><span class=\"pi\">:<\/span> <span class=\"s\">scratch-version<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C\"><\/span>\n<p>  \u0633\u0627\u062e\u062a \u0628\u0627\u06cc\u0646\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0647\u0627\u06cc \u0628\u0627\u06cc\u0646\u0631\u06cc\u060c \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0645 <strong>\u0645\u0627\u062a\u0631\u06cc\u0633 \u0645\u06cc \u0633\u0627\u0632\u062f<\/strong> (\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0645\u0627\u062a\u0631\u06cc\u0633 \u0627\u0642\u062f\u0627\u0645\u0627\u062a GitHub) \u062f\u0631 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631. \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0647\u0645\u0632\u0645\u0627\u0646 \u067e\u0644\u062a\u0641\u0631\u0645 \u0647\u0627 \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">jobs<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">build_sea<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">runs-on<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ubuntu-latest<\/span>\n    <span class=\"na\">strategy<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">matrix<\/span><span class=\"pi\">:<\/span>\n        <span class=\"na\">os<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"nv\">alpine<\/span><span class=\"pi\">,<\/span> <span class=\"nv\">bullseye<\/span><span class=\"pi\">]<\/span>\n        <span class=\"na\">arch<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"nv\">amd64<\/span><span class=\"pi\">,<\/span> <span class=\"nv\">arm64<\/span><span class=\"pi\">]<\/span>\n    <span class=\"na\">steps<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">...<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Build binary<\/span>\n        <span class=\"na\">run<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\n          <span class=\"s\">docker run --rm --platform linux\/${{ matrix.arch }} -v \"$PWD\":\/app -w \/app node:20.18.0-${{ matrix.os }} .\/scripts\/generate-sea.sh .\/sea\/dclint-${{ matrix.os }}-${{ matrix.arch }}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0637 \u0644\u0648\u0644\u0647 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u0641\u0627\u06cc\u0644 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 GitHub  <\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86_%D8%A8%D8%A7%DB%8C%D9%86%D8%B1%DB%8C_%D8%A8%D9%87_%D9%86%D8%B3%D8%AE%D9%87_%D9%87%D8%A7\"><\/span>\n<p>  \u0627\u0641\u0632\u0648\u062f\u0646 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0628\u0647 \u0646\u0633\u062e\u0647 \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627\u06cc\u0646\u0631\u06cc \u0647\u0627 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0628\u0647 \u0646\u0633\u062e\u0647 \u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u0634\u0648\u0646\u062f <code>semantic-release<\/code>\u060c \u0627\u06af\u0631\u0686\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0631\u0648\u0634 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0646\u06cc\u0632 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f.  <\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0628\u062e\u0634\u06cc \u0627\u0632 <code>release.config.js<\/code> \u0645\u0633\u0626\u0648\u0644 \u067e\u06cc\u0648\u0633\u062a \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u0647\u0627:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight jsx\"><code><span class=\"k\">export<\/span> <span class=\"k\">default<\/span> <span class=\"p\">{<\/span>\n  <span class=\"p\">...<\/span>\n  <span class=\"na\">plugins<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n    <span class=\"p\">...<\/span>\n    <span class=\"p\">[<\/span>\n      <span class=\"dl\">'<\/span><span class=\"s1\">@semantic-release\/github<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">{<\/span>\n        <span class=\"na\">assets<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n          <span class=\"p\">{<\/span>\n            <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">README.md<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">label<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Documentation<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n          <span class=\"p\">},<\/span>\n          <span class=\"p\">{<\/span>\n            <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">CHANGELOG.md<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">label<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Changelog<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n          <span class=\"p\">},<\/span>\n          <span class=\"p\">{<\/span>\n            <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">sea\/dclint-alpine-amd64<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">label<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">DClint Alpine Linux Binary (amd64)<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n          <span class=\"p\">},<\/span>\n          <span class=\"p\">{<\/span>\n            <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">sea\/dclint-bullseye-amd64<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">label<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">DClint Bullseye Linux Binary (amd64)<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n          <span class=\"p\">},<\/span>\n          <span class=\"p\">{<\/span>\n            <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">sea\/dclint-alpine-arm64<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">label<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">DClint Alpine Linux Binary (arm64)<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n          <span class=\"p\">},<\/span>\n          <span class=\"p\">{<\/span>\n            <span class=\"na\">path<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">sea\/dclint-bullseye-arm64<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n            <span class=\"na\">label<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">DClint Bullseye Linux Binary (arm64)<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span>\n          <span class=\"p\">},<\/span>\n        <span class=\"p\">],<\/span>\n      <span class=\"p\">},<\/span>\n    <span class=\"p\">],<\/span>\n  <span class=\"p\">],<\/span>\n<span class=\"p\">};<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>Release.config.js \u0631\u0627 \u062f\u0631 GitHub \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D9%81%DA%A9%D8%A7%D8%B1_%D9%86%D9%87%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  \u0627\u0641\u06a9\u0627\u0631 \u0646\u0647\u0627\u06cc\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u062d\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0631 \u0631\u0648\u06cc <code>dclint<\/code>\u060c \u0628\u0627 \u06a9\u0627\u0631\u0647\u0627\u06cc\u06cc \u0631\u0648\u0628\u0631\u0648 \u0634\u062f\u0645 \u06a9\u0647 \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0633\u0627\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u06cc\u062f\u0646\u062f \u0627\u0645\u0627 \u0628\u0647 \u0633\u0631\u0639\u062a \u062a\u0628\u062f\u06cc\u0644 \u0628\u0647 \u0686\u0627\u0644\u0634 \u0647\u0627\u06cc \u062c\u0627\u0644\u0628\u06cc \u0634\u062f\u0646\u062f. <\/p>\n<p>\u0627\u06cc\u0646 \u0686\u0627\u0644\u0634 \u0647\u0627 \u0628\u0647 \u0645\u0646 \u062a\u062c\u0631\u0628\u06cc\u0627\u062a \u0627\u0631\u0632\u0634\u0645\u0646\u062f\u06cc \u062f\u0627\u062f \u0648 \u0628\u0647 \u0633\u0627\u062e\u062a\u0646 \u0622\u0646 \u06a9\u0645\u06a9 \u06a9\u0631\u062f <code>dclint<\/code> \u0627\u0628\u0632\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062a\u0631: \u0628\u062f\u0648\u0646 Node.js \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f\u060c \u0627\u0632 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0627\u0632 \u0637\u0631\u06cc\u0642 Docker \u06cc\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0645\u0633\u062a\u0642\u0644 \u0646\u0635\u0628 \u0634\u0648\u062f.  <\/p>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646 \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0647\u0627\u060c \u0645\u0646 \u062a\u0648\u0627\u0646\u0633\u062a\u0645 \u0627\u0646\u062f\u0627\u0632\u0647 \u062a\u0635\u0627\u0648\u06cc\u0631 Docker \u0631\u0627 \u0628\u0647 \u0645\u06cc\u0632\u0627\u0646 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u06a9\u0627\u0647\u0634 \u062f\u0647\u0645:  <\/p>\n<ul>\n<li>\u0627\u0646\u062f\u0627\u0632\u0647 \u0641\u0634\u0631\u062f\u0647 \u062a\u0635\u0648\u06cc\u0631 Docker \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0622\u0644\u067e\u0627\u06cc\u0646 \u06a9\u0627\u0647\u0634 \u06cc\u0627\u0641\u062a <strong>93 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a<\/strong> \u0628\u0647 <strong>43 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a<\/strong>.\n<\/li>\n<li>\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u062e\u0631\u0627\u0634\u060c \u0627\u0646\u062f\u0627\u0632\u0647 \u0627\u0633\u062a <strong>38 \u0645\u06af\u0627\u0628\u0627\u06cc\u062a<\/strong>.\n<\/li>\n<\/ul>\n<p>\u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0628\u0628\u06cc\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0647\u0645\u0647 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u062e\u0632\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f. \u0645\u0646 \u0627\u0632 \u0633\u062a\u0627\u0631\u0647 \u0647\u0627\u06cc \u0634\u0645\u0627 \u0648 \u0647\u0631 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u06cc \u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0642\u062f\u0631\u062f\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u0645.  <\/p>\n<hr\/>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0631\u0627 \u062f\u0648\u0633\u062a \u062f\u0627\u0634\u062a\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u067e\u06cc \u067e\u0627\u0644 \u0627\u0632 \u0645\u0646 \u062d\u0645\u0627\u06cc\u062a \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u0645\u0646 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0646\u0627\u0645 \u0645\u0646 \u0633\u0631\u06af\u0626\u06cc \u0627\u0633\u062a \u0648 \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 dclint\u060c \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 CLI \u0628\u0631\u0627\u06cc \u067e\u0631 \u06a9\u0631\u062f\u0646 \u0648 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc Docker Compose \u0647\u0633\u062a\u0645. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0646\u062d\u0648\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0627\u0628\u0632\u0627\u0631 Node.js CLI \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f \u06a9\u0647: \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0645\u0633\u062a\u0642\u0644 \u06a9\u0627\u0631 \u0645\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":86340,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-86339","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/86339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=86339"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/86339\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/86340"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=86339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=86339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=86339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}