diff --git a/apps/site/app/sitemap.ts b/apps/site/app/sitemap.ts index 2ccec094b5a29..5724851ac6460 100644 --- a/apps/site/app/sitemap.ts +++ b/apps/site/app/sitemap.ts @@ -6,30 +6,59 @@ import { EXTERNAL_LINKS_SITEMAP, } from '@/next.constants.mjs'; import { dynamicRouter } from '@/next.dynamic.mjs'; -import { availableLocaleCodes } from '@/next.locales.mjs'; +import { availableLocaleCodes, defaultLocale } from '@/next.locales.mjs'; // This is the combination of the Application Base URL and Base PATH const baseUrlAndPath = `${BASE_URL}${BASE_PATH}`; // This allows us to generate a `sitemap.xml` file dynamically based on the needs of the Node.js Website -// Next.js Sitemap Generation doesn't support `alternate` refs yet -// @see https://github.com/vercel/next.js/discussions/55646 const sitemap = async (): Promise => { - const paths: Array = []; + const routes = await dynamicRouter.getRoutesByLanguage(defaultLocale.code); + const paths = []; - for (const locale of availableLocaleCodes) { - const routes = await dynamicRouter.getRoutesByLanguage(locale); + const currentDate = new Date().toISOString(); - paths.push(...routes.map(route => `${baseUrlAndPath}/${locale}/${route}`)); - } + for (const route of routes) { + const availableLocalesForRoute = []; - const currentDate = new Date().toISOString(); + for (const locale of availableLocaleCodes.filter( + locale => locale !== defaultLocale.code + )) { + const markdownFile = await dynamicRouter.getMarkdownFile(locale, route); + const isAvailable = markdownFile.filename !== ''; + if (isAvailable) { + availableLocalesForRoute.push(locale); + } + } + + const alternatesPaths = availableLocalesForRoute.reduce( + (acc, locale) => ({ + ...acc, + [locale]: `${baseUrlAndPath}/${locale}/${route}`, + }), + {} + ); + + paths.push({ + url: `${baseUrlAndPath}/${defaultLocale.code}/${route}`, + lastModified: currentDate, + changeFrequency: 'always' as const, + alternates: { + languages: { + ...alternatesPaths, + }, + }, + }); + } - return [...paths, ...EXTERNAL_LINKS_SITEMAP].map(route => ({ - url: route, - lastModified: currentDate, - changeFrequency: 'always', - })); + return [ + ...paths, + ...EXTERNAL_LINKS_SITEMAP.map(route => ({ + url: route, + lastModified: currentDate, + changeFrequency: 'always' as const, + })), + ]; }; export default sitemap; diff --git a/apps/site/i18n/config.json b/apps/site/i18n/config.json index f90457204fed1..bf68c630eab7f 100644 --- a/apps/site/i18n/config.json +++ b/apps/site/i18n/config.json @@ -266,7 +266,7 @@ "langDir": "ltr", "dateFormat": "DD.MM.YYYY", "hrefLang": "uk", - "enabled": false, + "enabled": true, "default": false }, { @@ -306,7 +306,7 @@ "langDir": "ltr", "dateFormat": "YYYY/MM/DD", "hrefLang": "zh-Hant", - "enabled": false, + "enabled": true, "default": false } ] diff --git a/apps/site/i18n/locales/fr.json b/apps/site/i18n/locales/fr.json index bd16abbd69a6a..80fcc13cb2696 100644 --- a/apps/site/i18n/locales/fr.json +++ b/apps/site/i18n/locales/fr.json @@ -290,9 +290,30 @@ "platform": "Plateforme" }, "codeBox": { + "fnmEnvSetup": "configurer l'environnement fnm", "systemManagerWarning": "n'est pas un gestionnaire de paquets Node.js. Veuillez vous assurer que {packageManager} est déjà installé.", "communityWarning": "Les gestionnaires de paquets et leurs scripts d'installation ne sont pas maintenus par le projet Node.js.", - "communityWarningReport": "Si vous rencontrez des problèmes, veuillez contacter les responsables du gestionnaire de paquets." + "communityWarningReport": "Si vous rencontrez des problèmes, veuillez contacter les responsables du gestionnaire de paquets.", + "installsNvm": "installe nvm (Gestionnaire de version node)", + "downloadAndInstallNodejsRestartTerminal": "télécharger et installer Node.js (il peut être nécessaire de redémarrer le terminal)", + "verifiesRightNodejsVersion": "vérifie que la bonne version de Node.js est présente dans l'environnement", + "verifiesRightNpmVersion": "vérifie que la bonne version de npm est présente dans l'environnement", + "shouldPrint": "devrait imprimer `{version}`", + "installsFnm": "installe fnm (Fast Node Manager)", + "downloadAndInstallNodejs": "télécharger et installer Node.js", + "activateFNM": "activer le fnm", + "noteWithColon": "NOTE:", + "dockerIsNotNodejsPackageManager": "Docker n'est pas un gestionnaire de paquets Node.js.", + "PleaseEndureAlreadyInstallOnSystem": "Assurez-vous qu'il est déjà installé sur votre système.", + "dockerInstructions": "Suivez les instructions officielles à l'adresse suivante : https://docs.docker.com/desktop/", + "dockerImagesLink": "Les images Docker sont fournies officiellement à l'adresse https://github.com/nodejs/docker-node/", + "pullsNodejsDockerImage": "tire l'image Docker de Node.js", + "homebrewIsNotNodejsPackageManager": "Homebrew n'est pas un gestionnaire de paquets Node.js.", + "homebrewInstructions": "Suivez les instructions officielles à l'adresse suivante : https://brew.sh/", + "homebrewSupportsIntallingMajorNodejsVersion": "Homebrew ne prend en charge que l'installation des versions majeures de Node.js et peut ne pas prendre en charge la dernière version de Node.js de la ligne de publication {version}.", + "chocolateyIsNotNodejsPackageManager": "Chocolatey n'est pas un gestionnaire de paquets Node.js.", + "chocolateyInstructions": "Suivez les instructions officielles à l'adresse suivante : https://chocolatey.org/", + "chocolateyNotMaintanedByNodejs": "Chocolatey n'est pas officiellement maintenu par le projet Node.js et pourrait ne pas supporter la version {version} de Node.js" } } } diff --git a/apps/site/i18n/locales/id.json b/apps/site/i18n/locales/id.json index 4526a70bdc63d..b2ef1d59ef7a2 100644 --- a/apps/site/i18n/locales/id.json +++ b/apps/site/i18n/locales/id.json @@ -290,9 +290,30 @@ "platform": "Platform" }, "codeBox": { + "fnmEnvSetup": "konfigurasikan lingkungan fnm", "systemManagerWarning": "bukan manajer paket Node.js. Pastikan Anda sudah menginstal {packageManager}.", "communityWarning": "Package manager dan skrip instalasi tidak di kelola oleh Node.js.", - "communityWarningReport": "Jika kamu mengalami masalah, harap hubungi pengelola pengelola paket." + "communityWarningReport": "Jika kamu mengalami masalah, harap hubungi pengelola pengelola paket.", + "installsNvm": "menginstal nvm (Pengelola Versi Node)", + "downloadAndInstallNodejsRestartTerminal": "unduh dan pasang Node.js (anda mungkin perlu memulai ulang terminal)", + "verifiesRightNodejsVersion": "memastikan versi Node.js yang benar ada di lingkungan", + "verifiesRightNpmVersion": "memastikan versi npm yang benar ada di lingkungan", + "shouldPrint": "seharusnya mencetak `{version}`", + "installsFnm": "menginstal fnm (Pengelola Node Cepat)", + "downloadAndInstallNodejs": "unduh dan pasang Node.js", + "activateFNM": "aktifkan fnm", + "noteWithColon": "CATATAN:", + "dockerIsNotNodejsPackageManager": "Docker bukan pengelola paket Node.js.", + "PleaseEndureAlreadyInstallOnSystem": "Silakan pastikan bahwa ia sudah terpasang di sistem Anda.", + "dockerInstructions": "Ikuti instruksi resmi di https://docs.docker.com/desktop/", + "dockerImagesLink": "Gambar Docker disediakan secara resmi di https://github.com/nodejs/docker-node/", + "pullsNodejsDockerImage": "mengambil gambar Docker Node.js", + "homebrewIsNotNodejsPackageManager": "Homebrew bukan pengelola paket Node.js.", + "homebrewInstructions": "Ikuti instruksi resmi di https://brew.sh/", + "homebrewSupportsIntallingMajorNodejsVersion": "Homebrew hanya mendukung pemasangan versi utama Node.js dan mungkin tidak mendukung versi Node.js terbaru dari jalur rilis {version}.", + "chocolateyIsNotNodejsPackageManager": "Chocolatey bukan pengelola paket Node.js.", + "chocolateyInstructions": "Ikuti instruksi resmi di https://chocolatey.org/", + "chocolateyNotMaintanedByNodejs": "Chocolatey tidak secara resmi dikelola oleh proyek Node.js dan mungkin tidak mendukung versi {version} dari Node.js" } } } diff --git a/apps/site/i18n/locales/pt.json b/apps/site/i18n/locales/pt.json index 17d9e8c6541b6..42daa41d6b63b 100644 --- a/apps/site/i18n/locales/pt.json +++ b/apps/site/i18n/locales/pt.json @@ -203,7 +203,7 @@ }, "search": { "searchBox": { - "placeholder": "Digitar..." + "placeholder": "Pesquisar..." }, "seeAll": { "text": "Ver todos os {count} resultados" @@ -290,9 +290,30 @@ "platform": "Plataforma" }, "codeBox": { + "fnmEnvSetup": "configurar o ambiente da fnm", "systemManagerWarning": "não é um gestor de pacote da Node.js. Devemos certificar-nos de que já temos {packageManager} instalado.", "communityWarning": "Os gestores de pacotes e os seus programas de instalação não são mantidos pelo projeto Node.js.", - "communityWarningReport": "Se encontrarmos problemas, devemos dirigir-nos aos responsáveis do gestor de pacote." + "communityWarningReport": "Se encontrarmos problemas, devemos dirigir-nos aos responsáveis do gestor de pacote.", + "installsNvm": "instala a nvm (Node Version Manager, ou Gestor de Pacote de Node)", + "downloadAndInstallNodejsRestartTerminal": "descarregar e instalar a Node.js (podemos precisar de reiniciar o terminal)", + "verifiesRightNodejsVersion": "verifica se a versão correta da Node.js está no ambiente", + "verifiesRightNpmVersion": "verifica se a versão correta da npm está no ambiente", + "shouldPrint": "deve imprimir `{version}`", + "installsFnm": "instala a fnm (Fast Node Manager, ou Gestor Rápido de Node)", + "downloadAndInstallNodejs": "decarregar e instalar a Node.js", + "activateFNM": "ativar a fnm", + "noteWithColon": "NOTA:", + "dockerIsNotNodejsPackageManager": "Docker não é um gestor de pacote da Node.js.", + "PleaseEndureAlreadyInstallOnSystem": "Precisamos de certificar-nos de que já instalada no nosso sistema.", + "dockerInstructions": "Seguir as instruções oficiais em https://docs.docker.com/desktop/", + "dockerImagesLink": "As imagens da Docker são fornecidas oficialmente em https://github.com/nodejs/docker-node/", + "pullsNodejsDockerImage": "puxa a imagem de Docker da Node.js", + "homebrewIsNotNodejsPackageManager": "Homebrew não é um gestor de pacote da Node.js.", + "homebrewInstructions": "Seguir as instruções oficiais em https://brew.sh/", + "homebrewSupportsIntallingMajorNodejsVersion": "Homebrew só suporta instalar versões principais da Node.js e pode não suportar a versão mais recente da Node.js da linha de lançamento {version}.", + "chocolateyIsNotNodejsPackageManager": "Chocolatey não é um gestor de pacote da Node.js.", + "chocolateyInstructions": "Seguir as instruções oficiais em https://chocolatey.org/", + "chocolateyNotMaintanedByNodejs": "Chocolatey não é oficialmente mantida pelo projeto Node.js e pode não suportar a versão {version} da Node.js" } } } diff --git a/apps/site/i18n/locales/uk.json b/apps/site/i18n/locales/uk.json new file mode 100644 index 0000000000000..1802e748e8b67 --- /dev/null +++ b/apps/site/i18n/locales/uk.json @@ -0,0 +1,320 @@ +{ + "components": { + "containers": { + "footer": { + "links": { + "trademarkPolicy": "Політика торгових марок", + "privacyPolicy": "Політика конфіденційності", + "codeOfConduct": "Кодекс поведінки", + "security": "Політика безпеки" + } + }, + "navBar": { + "links": { + "about": "Про Node.js", + "download": "Завантажити", + "docs": "Документація", + "guides": "Посібники", + "learn": "Навчання", + "security": "Безпека", + "certification": "Сертифікація", + "blog": "Блог" + } + } + }, + "navigation": { + "learn": { + "gettingStarted": { + "links": { + "gettingStarted": "Початок роботи", + "introductionToNodejs": "Вступ до Node.js", + "howToInstallNodejs": "Як установити Node.js", + "howMuchJavascriptDoYouNeedToKnowToUseNodejs": "Як добре треба знати JavaScript, щоб використовувати Node.js?", + "differencesBetweenNodejsAndTheBrowser": "Різниця між Node.js і браузером", + "theV8JavascriptEngine": "Рушій JavaScript V8", + "anIntroductionToTheNpmPackageManager": "Вступ до менеджера пакетів npm", + "ecmascript2015Es6AndBeyond": "ECMAScript 2015 (ES6) і новіші версії", + "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Різниця між клієнтським та розробницьким середовищем у Node.js", + "nodejsWithTypescript": "Node.js із TypeScript", + "nodejsWithWebassembly": "Node.js із WebAssembly", + "debugging": "Налагодження Node.js", + "profiling": "Профілювання застосунків Node.js", + "securityBestPractices": "Найкращі практики безпеки" + } + }, + "asynchronousWork": { + "links": { + "asynchronousWork": "Асинхронна робота", + "asynchronousFlowControl": "Асинхронне управління потоком", + "overviewOfBlockingVsNonBlocking": "Огляд блокувальних і неблокувальних викликів", + "javascriptAsynchronousProgrammingAndCallbacks": "Асинхронне програмування і функції зворотного виклику в JavaScript", + "discoverJavascriptTimers": "Таймери JavaScript", + "eventLoopTimersAndNexttick": "Цикл подій у Node.js", + "theNodejsEventEmitter": "Емітер подій у Node.js", + "understandingProcessnexttick": "Розуміння process.nextTick()", + "understandingSetimmediate": "Розуміння setImmediate()", + "dontBlockTheEventLoop": "Уникайте блокування циклу подій" + } + }, + "manipulatingFiles": { + "links": { + "manipulatingFiles": "Робота з файлами", + "nodejsFileStats": "Властивості файлу в Node.js", + "nodejsFilePaths": "Шляхи файлу в Node.js", + "workingWithFileDescriptorsInNodejs": "Робота з файловими дескрипторами в Node.js", + "readingFilesWithNodejs": "Читання файлів із Node.js", + "writingFilesWithNodejs": "Запис у файл із Node.js", + "workingWithFoldersInNodejs": "Робота з директоріями з Node.js", + "workingWithDifferentFilesystems": "Робота з різними файловими системами" + } + }, + "commandLine": { + "links": { + "commandLine": "Командний рядок", + "runNodejsScriptsFromTheCommandLine": "Запуск скриптів Node.js із командного рядка", + "howToReadEnvironmentVariablesFromNodejs": "Отримання доступу до змінних середовища в Node.js", + "howToUseTheNodejsRepl": "Як використовувати REPL у Node.js", + "outputToTheCommandLineUsingNodejs": "Вивід у командний рядок із Node.js", + "acceptInputFromTheCommandLineInNodejs": "Зчитування вводу з командного рядка з Node.js" + } + }, + "modules": { + "links": { + "modules": "Модулі", + "publishingNodeApiModules": "Як опублікувати пакет Node-API", + "anatomyOfAnHttpTransaction": "Анатомія HTTP-транзакції", + "abiStability": "Стабільність ABI", + "backpressuringInStreams": "Зворотний тиск у потоках" + } + }, + "diagnostics": { + "links": { + "diagnostics": "Діагностика", + "userJourney": "Шлях користувача", + "memory": "Пам’ять", + "liveDebugging": "Налагодження в реальному часі", + "poorPerformance": "Низька продуктивність", + "flameGraphs": "Flame-графіки" + } + }, + "testRunner": { + "links": { + "testRunner": "Виконавець тестів", + "introduction": "Що таке виконавець тестів у Node.js?", + "usingTestRunner": "Використання виконавця тестів у Node.js" + } + } + }, + "about": { + "links": { + "about": "Про Node.js", + "aboutSide": "Про Node.js®", + "branding": "Брендинг Node.js", + "governance": "Управління проєктом", + "releases": "Релізи Node.js", + "security": "Звітність про безпеку" + } + }, + "getInvolved": { + "links": { + "getInvolved": "Долучитися", + "collabSummit": "Саміт співпраці", + "upcomingEvents": "Майбутні події", + "contribute": "Внесок у Node.js", + "codeOfConduct": "Кодекс поведінки" + } + } + }, + "downloadList": { + "links": { + "previousReleases": "Релізи Node.js", + "packageManager": "Установка Node.js через менеджер пакетів", + "shaSums": { + "title": "Підписані SHASUMS для файлів релізу", + "howToVerify": " (Як перевірити)" + }, + "allDownloads": "Усі варіанти завантажень", + "nightlyReleases": "Нічні збірки", + "unofficialBuilds": "Неофіційні збірки", + "buildingFromSource": "Збірка Node.js із вихідного коду на підтримуваних платформах", + "installingOnLinux": "Установка Node.js через бінарний архів", + "installingOnWsl": "Установка на підсистемі Windows для Linux (WSL)" + } + }, + "downloadReleasesTable": { + "changelog": "Список змін", + "releases": "Релізи", + "docs": "Документація" + }, + "pagination": { + "next": "Далі", + "previous": "Назад" + }, + "common": { + "breadcrumbs": { + "navigateToHome": "До головної" + }, + "crossLink": { + "previous": "Назад", + "next": "Далі" + }, + "codebox": { + "copy": "Скопіювати", + "copied": "Скопійовано!" + }, + "pagination": { + "prev": "Назад", + "prevAriaLabel": "Попередня сторінка", + "next": "Далі", + "nextAriaLabel": "Наступна сторінка", + "defaultLabel": "Нумерація сторінок", + "pageLabel": "Перейти до {pageNumber} сторінки" + }, + "sidebar": { + "title": "Змінити сторінку" + }, + "languageDropdown": { + "label": "Обрати мову" + }, + "themeToggle": { + "label": "Перемкнути темний режим" + } + }, + "mdx": { + "upcomingEvents": { + "defaultTitle": "Немає майбутніх подій" + } + }, + "metabar": { + "lastUpdated": "Востаннє оновлено", + "readingTime": "Час на читання", + "addedIn": "Додано", + "author": "Автор", + "authors": "Автори", + "contribute": "Долучитися", + "contributeText": "Редагувати цю сторінку", + "viewAs": "Переглянути як", + "tableOfContents": "Зміст" + }, + "downloads": { + "changelogModal": { + "startContributing": "Долучитися" + } + }, + "search": { + "searchBox": { + "placeholder": "Пошук..." + }, + "seeAll": { + "text": "Переглянути всі {count} результатів" + }, + "searchError": { + "text": "Виникла помилка під час пошуку. Спробуйте пізніше." + }, + "poweredBy": { + "text": "За підтримки" + }, + "noResults": { + "text": "Не знайдено результатів для «{query}»." + }, + "emptyState": { + "text": "Знайти щось..." + }, + "searchPage": { + "title": "Ви шукаєте: {query}" + } + }, + "blog": { + "blogHeader": { + "subtitle": "Останні новини Node.js, тематичні дослідження, практичні заняття та ресурси.", + "rssLink": "RSS-канал" + } + } + }, + "layouts": { + "blogPost": { + "author": { + "byLine": "{author, select, null {} other {Від {author}, }}" + } + }, + "blogIndex": { + "categoryName": "{category, select, all {Блог} other {Пости блогу {category}}}" + }, + "blog": { + "title": "Блог", + "selectCategory": "Категорії", + "categories": { + "all": "Усе", + "announcements": "Оголошення", + "release": "Релізи", + "vulnerability": "Уразливості", + "advisory-board": "Консультативний комітет", + "community": "Спільнота", + "feature": "Функціонал", + "module": "Модуль", + "npm": "npm", + "uncategorized": "Без категорії", + "video": "Відео", + "weekly": "Щотижневі оновлення", + "wg": "Робочі групи", + "events": "Події" + } + }, + "error": { + "notFound": { + "title": "Сторінку не знайдено", + "description": "На жаль, нам не вдалося знайти сторінку, яку ви шукаєте! Спробуйте почати знову з головної сторінки." + }, + "internalServerError": { + "title": "Внутрішня помилка сервера", + "description": "На цій сторінці виникла невиправна помилка." + }, + "backToHome": "До головної" + }, + "download": { + "selectCategory": "Категорії", + "categories": { + "prebuilt-installer": "Готовий інсталятор", + "prebuilt-binaries": "Готові бінарні файли", + "package-manager": "Менеджер пакетів", + "source-code": "Вихідний код" + }, + "buttons": { + "prebuilt": "Завантажити Node.js {version}", + "source": "Завантажити вихідний код Node.js {version}" + }, + "dropdown": { + "bitness": "Розрядність", + "os": "Операційна система", + "version": "Версія", + "platform": "Платформа" + }, + "codeBox": { + "fnmEnvSetup": "налаштовує середовище fnm", + "systemManagerWarning": "не є менеджером пакетів Node.js. Переконайтеся, що у вас уже встановлено {packageManager}.", + "communityWarning": "Менеджери пакетів та їхні скрипти встановлення не обслуговуються проєктом Node.js.", + "communityWarningReport": "Якщо у вас виникне проблема, звертайтеся до супроводжувачів менеджера пакетів.", + "installsNvm": "установлює nvm (Node Version Manager)", + "downloadAndInstallNodejsRestartTerminal": "завантажує й установлює Node.js (можливо, вам доведеться перезапустити термінал)", + "verifiesRightNodejsVersion": "перевіряє правильність версії Node.js у середовищі", + "verifiesRightNpmVersion": "перевіряє правильність версії npm у середовищі", + "shouldPrint": "повинно вивести `{version}`", + "installsFnm": "установлює fnm (Fast Node Manager)", + "downloadAndInstallNodejs": "завантажує й установлює Node.js", + "activateFNM": "активує fnm", + "noteWithColon": "ПРИМІТКА:", + "dockerIsNotNodejsPackageManager": "Docker не є менеджером пакетів Node.js.", + "PleaseEndureAlreadyInstallOnSystem": "Переконайтеся, що він уже встановлений на вашій системі.", + "dockerInstructions": "Дотримуйтесь офіційних інструкцій на https://docs.docker.com/desktop/", + "dockerImagesLink": "Образи Docker офіційно надаються на https://github.com/nodejs/docker-node/", + "pullsNodejsDockerImage": "завантажує образ Docker Node.js", + "homebrewIsNotNodejsPackageManager": "Homebrew не є менеджером пакетів Node.js.", + "homebrewInstructions": "Дотримуйтесь офіційних інструкцій на https://brew.sh/", + "homebrewSupportsIntallingMajorNodejsVersion": "Homebrew підтримує лише основні версії Node.js і може не підтримувати останню версію Node.js {version} ряду версій.", + "chocolateyIsNotNodejsPackageManager": "Chocolatey не є менеджером пакетів Node.js.", + "chocolateyInstructions": "Дотримуйтесь офіційних інструкцій на https://chocolatey.org/", + "chocolateyNotMaintanedByNodejs": "Chocolatey офіційно не підтримується проєктом Node.js і може не підтримувати Node.js версії {version}" + } + } + } +} diff --git a/apps/site/i18n/locales/zh-tw.json b/apps/site/i18n/locales/zh-tw.json new file mode 100644 index 0000000000000..4d26d44eef683 --- /dev/null +++ b/apps/site/i18n/locales/zh-tw.json @@ -0,0 +1,320 @@ +{ + "components": { + "containers": { + "footer": { + "links": { + "trademarkPolicy": "商標政策", + "privacyPolicy": "隱私政策", + "codeOfConduct": "行為準則", + "security": "安全性政策" + } + }, + "navBar": { + "links": { + "about": "關於", + "download": "下載", + "docs": "文件", + "guides": "指南", + "learn": "學習資源", + "security": "安全性", + "certification": "認證", + "blog": "部落格" + } + } + }, + "navigation": { + "learn": { + "gettingStarted": { + "links": { + "gettingStarted": "開始入門", + "introductionToNodejs": "Node.js 介紹", + "howToInstallNodejs": "如何安裝 Node.js", + "howMuchJavascriptDoYouNeedToKnowToUseNodejs": "使用 Node.js 前,需要掌握多少 JavaScript 知識?", + "differencesBetweenNodejsAndTheBrowser": "Node.js 與瀏覽器的差別", + "theV8JavascriptEngine": "JavaScript V8 引擎", + "anIntroductionToTheNpmPackageManager": "Npm 套件管理器介紹", + "ecmascript2015Es6AndBeyond": "ECMAScript 2015 (ES6) 與更高的版本", + "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.js 在開發與生產環境的差別", + "nodejsWithTypescript": "Node.js 搭配 TypeScript", + "nodejsWithWebassembly": "Node.js 搭配 WebAssembly", + "debugging": "Node.js 除錯", + "profiling": "分析 Node.js 應用程式", + "securityBestPractices": "安全最佳實踐" + } + }, + "asynchronousWork": { + "links": { + "asynchronousWork": "非同步工作", + "asynchronousFlowControl": "非同步流程控制", + "overviewOfBlockingVsNonBlocking": "阻塞與非阻塞概述", + "javascriptAsynchronousProgrammingAndCallbacks": "JavaScript 中的非同步與回調函數", + "discoverJavascriptTimers": "探索 JavaScript 計時器", + "eventLoopTimersAndNexttick": "Node.js 中的事件循環", + "theNodejsEventEmitter": "Node.js 中的事件發射器", + "understandingProcessnexttick": "理解 process.nextTick()", + "understandingSetimmediate": "理解 setImmediate()", + "dontBlockTheEventLoop": "請勿阻塞事件循環" + } + }, + "manipulatingFiles": { + "links": { + "manipulatingFiles": "檔案操作", + "nodejsFileStats": "Node.js 中的檔案狀態", + "nodejsFilePaths": "Node.js 中的檔案路徑", + "workingWithFileDescriptorsInNodejs": "在 Node.js 中使用檔案描述符", + "readingFilesWithNodejs": "使用 Node.js 讀取檔案", + "writingFilesWithNodejs": "使用 Node.js 寫入檔案", + "workingWithFoldersInNodejs": "在 Node.js 中操作資料夾", + "workingWithDifferentFilesystems": "如何使用不同的檔案系統" + } + }, + "commandLine": { + "links": { + "commandLine": "命令列", + "runNodejsScriptsFromTheCommandLine": "使用命令列執行 Node.js 腳本", + "howToReadEnvironmentVariablesFromNodejs": "如何從 Node.js 中讀取環境變數", + "howToUseTheNodejsRepl": "如何使用 Node.js REPL", + "outputToTheCommandLineUsingNodejs": "使用 Node.js 輸出到命令列", + "acceptInputFromTheCommandLineInNodejs": "在 Node.js 中接受命令列輸入" + } + }, + "modules": { + "links": { + "modules": "模塊", + "publishingNodeApiModules": "如何釋出 Node-API 套件", + "anatomyOfAnHttpTransaction": "HTTP 事務解析", + "abiStability": "ABI 穩定性", + "backpressuringInStreams": "串流中的背壓機制" + } + }, + "diagnostics": { + "links": { + "diagnostics": "診斷訊息", + "userJourney": "使用者旅程", + "memory": "記憶體", + "liveDebugging": "即時除錯", + "poorPerformance": "低效能", + "flameGraphs": "火焰圖" + } + }, + "testRunner": { + "links": { + "testRunner": "測試執行器", + "introduction": "探索 Node.js 中的測試執行器", + "usingTestRunner": "使用 Node.js 中的測試執行器" + } + } + }, + "about": { + "links": { + "about": "關於 Node.js", + "aboutSide": "關於 Node.js®", + "branding": "Node.js 的品牌形象", + "governance": "專案治理", + "releases": "Node.js 版本", + "security": "安全性回報" + } + }, + "getInvolved": { + "links": { + "getInvolved": "加入我們", + "collabSummit": "協作高峰會", + "upcomingEvents": "近期活動", + "contribute": "為 Node.js 做出貢獻", + "codeOfConduct": "行為準則" + } + } + }, + "downloadList": { + "links": { + "previousReleases": "Node.js 版本", + "packageManager": "使用套件管理器安裝 Node.js", + "shaSums": { + "title": "釋出檔案的已簽署 SHASUM", + "howToVerify": " (如何驗證)" + }, + "allDownloads": "所有下載選項", + "nightlyReleases": "每日建構版本", + "unofficialBuilds": "非官方建構版本", + "buildingFromSource": "在支援的平台上從原始碼建構 Node.js", + "installingOnLinux": "使用二進制存檔安裝 Node.js", + "installingOnWsl": "在適用於 Linux 的 Windows 子系統 (WSL) 上安裝" + } + }, + "downloadReleasesTable": { + "changelog": "更新紀錄", + "releases": "版本釋出", + "docs": "文件" + }, + "pagination": { + "next": "下一頁", + "previous": "上一頁" + }, + "common": { + "breadcrumbs": { + "navigateToHome": "返回首頁" + }, + "crossLink": { + "previous": "上一頁", + "next": "下一頁" + }, + "codebox": { + "copy": "複製到剪貼簿", + "copied": "已複製到剪貼簿!" + }, + "pagination": { + "prev": "上一頁", + "prevAriaLabel": "上一頁", + "next": "下一頁", + "nextAriaLabel": "下一頁", + "defaultLabel": "分頁", + "pageLabel": "前往頁面 {pageNumber}" + }, + "sidebar": { + "title": "變更頁面" + }, + "languageDropdown": { + "label": "選擇語言" + }, + "themeToggle": { + "label": "切換深色模式" + } + }, + "mdx": { + "upcomingEvents": { + "defaultTitle": "近期沒有活動" + } + }, + "metabar": { + "lastUpdated": "最後更新", + "readingTime": "閱讀時長", + "addedIn": "新增於", + "author": "作者", + "authors": "作者", + "contribute": "貢獻", + "contributeText": "編輯此頁面", + "viewAs": "檢視模式", + "tableOfContents": "目錄" + }, + "downloads": { + "changelogModal": { + "startContributing": "開始貢獻" + } + }, + "search": { + "searchBox": { + "placeholder": "開始輸入…" + }, + "seeAll": { + "text": "查看全部 {count} 則結果" + }, + "searchError": { + "text": "搜尋時發生錯誤,請稍後再試。" + }, + "poweredBy": { + "text": "技術支援" + }, + "noResults": { + "text": "找不到任何「{query}」的搜尋結果。" + }, + "emptyState": { + "text": "開始搜尋…" + }, + "searchPage": { + "title": "你正在搜尋:{query}" + } + }, + "blog": { + "blogHeader": { + "subtitle": "最新的 Node.js 動態、案例研究、教學和資源。", + "rssLink": "RSS 訂閱" + } + } + }, + "layouts": { + "blogPost": { + "author": { + "byLine": "{author, select, null {} other {By {author}, }}" + } + }, + "blogIndex": { + "categoryName": "{category, select, all {Blog} other {{category} Blog Posts}}" + }, + "blog": { + "title": "部落格", + "selectCategory": "類別", + "categories": { + "all": "所有內容", + "announcements": "公告", + "release": "版本釋出", + "vulnerability": "漏洞", + "advisory-board": "諮詢委員會", + "community": "社群", + "feature": "功能", + "module": "模塊", + "npm": "npm", + "uncategorized": "未歸類", + "video": "影片", + "weekly": "每週更新", + "wg": "工作小組", + "events": "活動" + } + }, + "error": { + "notFound": { + "title": "找不到頁面", + "description": "很抱歉,查無目標頁面!請從首頁重新開始。" + }, + "internalServerError": { + "title": "內部伺服器錯誤", + "description": "此頁面發生了無法恢復的錯誤。" + }, + "backToHome": "回到首頁" + }, + "download": { + "selectCategory": "類別", + "categories": { + "prebuilt-installer": "預建構安裝程式", + "prebuilt-binaries": "預建構二進制文件", + "package-manager": "套件管理器", + "source-code": "原始碼" + }, + "buttons": { + "prebuilt": "下載 Node.js {version}", + "source": "下載 Node.js {version} 的原始碼" + }, + "dropdown": { + "bitness": "位元數", + "os": "作業系統", + "version": "版本", + "platform": "平台" + }, + "codeBox": { + "fnmEnvSetup": "設定 fnm 環境", + "systemManagerWarning": "不是 Node.js 的套件管理器。請確保你已安裝 {packageManager}。", + "communityWarning": "套件管理器與其安裝腳本並非由 Node.js 專案維護。", + "communityWarningReport": "如果遇到問題,請聯絡套件管理器的維護者。", + "installsNvm": "安裝 nvm (Node 版本管理器)", + "downloadAndInstallNodejsRestartTerminal": "下載並安裝 Node.js (您可能需要重新啟動終端機)", + "verifiesRightNodejsVersion": "驗證環境中正確的 Node.js 版本", + "verifiesRightNpmVersion": "驗證環境中正確的 npm 版本", + "shouldPrint": "應該顯示 `{version}`", + "installsFnm": "安裝 fnm (快速 Node 管理器)", + "downloadAndInstallNodejs": "下載並安裝 Node.js", + "activateFNM": "啟用 fnm", + "noteWithColon": "請注意:", + "dockerIsNotNodejsPackageManager": "Docker 並非 Node.js 套件管理器。", + "PleaseEndureAlreadyInstallOnSystem": "請確保它已經安裝在您的系統上。", + "dockerInstructions": "請前往下列網址並按照官方指示操作:https://docs.docker.com/desktop/", + "dockerImagesLink": "Docker 映像可於 https://github.com/nodejs/docker-node/ 官網取得。", + "pullsNodejsDockerImage": "拉取 Node.js Docker 映像", + "homebrewIsNotNodejsPackageManager": "Homebrew 並非 Node.js 套件管理器。", + "homebrewInstructions": "請前往下列網址並按照官方指示操作:https://brew.sh/", + "homebrewSupportsIntallingMajorNodejsVersion": "Homebrew 僅支援安裝 Node.js 主要版本,並可能不支援 {version} 發行系列的最新 Node.js 版本。", + "chocolateyIsNotNodejsPackageManager": "Chocolatey 並非 Node.js 套件管理器。", + "chocolateyInstructions": "請前往下列網址並按照官方指示操作:https://chocolatey.org/", + "chocolateyNotMaintanedByNodejs": "Chocolatey 並非由 Node.js 專案官方維護,並可能不支援 {version} 版本的 Node.j" + } + } + } +} diff --git a/apps/site/pages/en/blog/release/v20.17.0.md b/apps/site/pages/en/blog/release/v20.17.0.md new file mode 100644 index 0000000000000..87a83bae52119 --- /dev/null +++ b/apps/site/pages/en/blog/release/v20.17.0.md @@ -0,0 +1,316 @@ +--- +date: '2024-08-21T17:40:21.142Z' +category: release +title: Node v20.17.0 (LTS) +layout: blog-post +author: Marco Ippolito +--- + +## 2024-08-21, Version 20.17.0 'Iron' (LTS), @marco-ippolito + +### module: support require()ing synchronous ESM graphs + +This release adds `require()` support for synchronous ESM graphs under +the flag `--experimental-require-module`. + +If `--experimental-require-module` is enabled, and the ECMAScript +module being loaded by `require()` meets the following requirements: + +- Explicitly marked as an ES module with a "type": "module" field in the closest package.json or a .mjs extension. +- Fully synchronous (contains no top-level await). + +`require()` will load the requested module as an ES Module, and return +the module name space object. In this case it is similar to dynamic +`import()` but is run synchronously and returns the name space object +directly. + +Contributed by Joyee Cheung in [#51977](https://github.com/nodejs/node/pull/51977) + +### path: add `matchesGlob` method + +Glob patterns can now be tested against individual paths via the `path.matchesGlob(path, pattern)` method. + +Contributed by Aviv Keller in [#52881](https://github.com/nodejs/node/pull/52881) + +### stream: expose DuplexPair API + +The function `duplexPair` returns an array with two items, +each being a `Duplex` stream connected to the other side: + +```js +const [sideA, sideB] = duplexPair(); +``` + +Whatever is written to one stream is made readable on the other. It provides +behavior analogous to a network connection, where the data written by the client +becomes readable by the server, and vice-versa. + +Contributed by Austin Wright in [#34111](https://github.com/nodejs/node/pull/34111) + +### Other Notable Changes + +- \[[`8e64c02b19`](https://github.com/nodejs/node/commit/8e64c02b19)] - **(SEMVER-MINOR)** **http**: add diagnostics channel `http.client.request.error` (Kohei Ueno) [#54054](https://github.com/nodejs/node/pull/54054) +- \[[`ae30674991`](https://github.com/nodejs/node/commit/ae30674991)] - **meta**: add jake to collaborators (jakecastelli) [#54004](https://github.com/nodejs/node/pull/54004) +- \[[`4a3ecbfc9b`](https://github.com/nodejs/node/commit/4a3ecbfc9b)] - **(SEMVER-MINOR)** **stream**: implement `min` option for `ReadableStreamBYOBReader.read` (Mattias Buelens) [#50888](https://github.com/nodejs/node/pull/50888) + +### Commits + +- \[[`b3a2726cbc`](https://github.com/nodejs/node/commit/b3a2726cbc)] - **assert**: use isError instead of instanceof in innerOk (Pietro Marchini) [#53980](https://github.com/nodejs/node/pull/53980) +- \[[`c7e4c3daf4`](https://github.com/nodejs/node/commit/c7e4c3daf4)] - **benchmark**: add cpSync benchmark (Yagiz Nizipli) [#53612](https://github.com/nodejs/node/pull/53612) +- \[[`a52de8c5ff`](https://github.com/nodejs/node/commit/a52de8c5ff)] - **bootstrap**: print `--help` message using `console.log` (Jacob Hummer) [#51463](https://github.com/nodejs/node/pull/51463) +- \[[`61b90e7c5e`](https://github.com/nodejs/node/commit/61b90e7c5e)] - **build**: update gcovr to 7.2 and codecov config (Benjamin E. Coe) [#54019](https://github.com/nodejs/node/pull/54019) +- \[[`a9c04eaa27`](https://github.com/nodejs/node/commit/a9c04eaa27)] - **build**: ensure v8_pointer_compression_sandbox is enabled on 64bit (Shelley Vohr) [#53884](https://github.com/nodejs/node/pull/53884) +- \[[`342a663d7a`](https://github.com/nodejs/node/commit/342a663d7a)] - **build**: trigger coverage ci when updating codecov (Yagiz Nizipli) [#53929](https://github.com/nodejs/node/pull/53929) +- \[[`5727b4d129`](https://github.com/nodejs/node/commit/5727b4d129)] - **build**: update codecov coverage build count (Yagiz Nizipli) [#53929](https://github.com/nodejs/node/pull/53929) +- \[[`977af25870`](https://github.com/nodejs/node/commit/977af25870)] - **build**: disable test-asan workflow (Michaël Zasso) [#53844](https://github.com/nodejs/node/pull/53844) +- \[[`04798fb104`](https://github.com/nodejs/node/commit/04798fb104)] - **build**: fix build warning of c-ares under GN build (Cheng) [#53750](https://github.com/nodejs/node/pull/53750) +- \[[`5ec5e78574`](https://github.com/nodejs/node/commit/5ec5e78574)] - **build**: fix mac build error of c-ares under GN (Cheng) [#53687](https://github.com/nodejs/node/pull/53687) +- \[[`3d8721f0a4`](https://github.com/nodejs/node/commit/3d8721f0a4)] - **build**: add version-specific library path for AIX (Richard Lau) [#53585](https://github.com/nodejs/node/pull/53585) +- \[[`ffb0bd344d`](https://github.com/nodejs/node/commit/ffb0bd344d)] - **build, tools**: drop leading `/` from `r2dir` (Richard Lau) [#53951](https://github.com/nodejs/node/pull/53951) +- \[[`a2d74f4c31`](https://github.com/nodejs/node/commit/a2d74f4c31)] - **build,tools**: simplify upload of shasum signatures (Michaël Zasso) [#53892](https://github.com/nodejs/node/pull/53892) +- \[[`993bb3b6e7`](https://github.com/nodejs/node/commit/993bb3b6e7)] - **child_process**: fix incomplete prototype pollution hardening (Liran Tal) [#53781](https://github.com/nodejs/node/pull/53781) +- \[[`137a2e5766`](https://github.com/nodejs/node/commit/137a2e5766)] - **cli**: document `--inspect` port `0` behavior (Aviv Keller) [#53782](https://github.com/nodejs/node/pull/53782) +- \[[`820e6e1737`](https://github.com/nodejs/node/commit/820e6e1737)] - **cli**: update `node.1` to reflect Atom's sunset (Aviv Keller) [#53734](https://github.com/nodejs/node/pull/53734) +- \[[`fa0e8d7b3b`](https://github.com/nodejs/node/commit/fa0e8d7b3b)] - **crypto**: avoid std::function (Tobias Nießen) [#53683](https://github.com/nodejs/node/pull/53683) +- \[[`460240c368`](https://github.com/nodejs/node/commit/460240c368)] - **crypto**: make deriveBits length parameter optional and nullable (Filip Skokan) [#53601](https://github.com/nodejs/node/pull/53601) +- \[[`ceb1d5e00a`](https://github.com/nodejs/node/commit/ceb1d5e00a)] - **crypto**: avoid taking ownership of OpenSSL objects (Tobias Nießen) [#53460](https://github.com/nodejs/node/pull/53460) +- \[[`44268c27eb`](https://github.com/nodejs/node/commit/44268c27eb)] - **deps**: update corepack to 0.29.3 (Node.js GitHub Bot) [#54072](https://github.com/nodejs/node/pull/54072) +- \[[`496975ece0`](https://github.com/nodejs/node/commit/496975ece0)] - **deps**: update c-ares to v1.32.3 (Node.js GitHub Bot) [#54020](https://github.com/nodejs/node/pull/54020) +- \[[`5eea419349`](https://github.com/nodejs/node/commit/5eea419349)] - **deps**: update c-ares to v1.32.2 (Node.js GitHub Bot) [#53865](https://github.com/nodejs/node/pull/53865) +- \[[`8c8e3688c5`](https://github.com/nodejs/node/commit/8c8e3688c5)] - **deps**: update googletest to 4b21f1a (Node.js GitHub Bot) [#53842](https://github.com/nodejs/node/pull/53842) +- \[[`78f6b34c77`](https://github.com/nodejs/node/commit/78f6b34c77)] - **deps**: update minimatch to 10.0.1 (Node.js GitHub Bot) [#53841](https://github.com/nodejs/node/pull/53841) +- \[[`398f7acca3`](https://github.com/nodejs/node/commit/398f7acca3)] - **deps**: update corepack to 0.29.2 (Node.js GitHub Bot) [#53838](https://github.com/nodejs/node/pull/53838) +- \[[`fa8f99d90b`](https://github.com/nodejs/node/commit/fa8f99d90b)] - **deps**: update simdutf to 5.3.0 (Node.js GitHub Bot) [#53837](https://github.com/nodejs/node/pull/53837) +- \[[`a19b28336b`](https://github.com/nodejs/node/commit/a19b28336b)] - **deps**: update ada to 2.9.0 (Node.js GitHub Bot) [#53748](https://github.com/nodejs/node/pull/53748) +- \[[`2f66c7e707`](https://github.com/nodejs/node/commit/2f66c7e707)] - **deps**: upgrade npm to 10.8.2 (npm team) [#53799](https://github.com/nodejs/node/pull/53799) +- \[[`2a2620e7c0`](https://github.com/nodejs/node/commit/2a2620e7c0)] - **deps**: update googletest to 34ad51b (Node.js GitHub Bot) [#53157](https://github.com/nodejs/node/pull/53157) +- \[[`c01ce60ce7`](https://github.com/nodejs/node/commit/c01ce60ce7)] - **deps**: update googletest to 305e5a2 (Node.js GitHub Bot) [#53157](https://github.com/nodejs/node/pull/53157) +- \[[`832328ea01`](https://github.com/nodejs/node/commit/832328ea01)] - **deps**: update c-ares to v1.32.1 (Node.js GitHub Bot) [#53753](https://github.com/nodejs/node/pull/53753) +- \[[`878e9a4ae7`](https://github.com/nodejs/node/commit/878e9a4ae7)] - **deps**: update minimatch to 9.0.5 (Node.js GitHub Bot) [#53646](https://github.com/nodejs/node/pull/53646) +- \[[`4647e6b5c5`](https://github.com/nodejs/node/commit/4647e6b5c5)] - **deps**: update c-ares to v1.32.0 (Node.js GitHub Bot) [#53722](https://github.com/nodejs/node/pull/53722) +- \[[`30310bf887`](https://github.com/nodejs/node/commit/30310bf887)] - **doc**: move numCPUs require to top of file in cluster CJS example (Alfredo González) [#53932](https://github.com/nodejs/node/pull/53932) +- \[[`36170eddca`](https://github.com/nodejs/node/commit/36170eddca)] - **doc**: update security-release process to automated one (Rafael Gonzaga) [#53877](https://github.com/nodejs/node/pull/53877) +- \[[`55f5e76ba7`](https://github.com/nodejs/node/commit/55f5e76ba7)] - **doc**: fix typo in technical-priorities.md (YoonSoo_Shin) [#54094](https://github.com/nodejs/node/pull/54094) +- \[[`1c0ccc0ca8`](https://github.com/nodejs/node/commit/1c0ccc0ca8)] - **doc**: fix typo in diagnostic tooling support tiers document (Taejin Kim) [#54058](https://github.com/nodejs/node/pull/54058) +- \[[`6a5120ff0f`](https://github.com/nodejs/node/commit/6a5120ff0f)] - **doc**: move GeoffreyBooth to TSC regular member (Geoffrey Booth) [#54047](https://github.com/nodejs/node/pull/54047) +- \[[`ead05aad2a`](https://github.com/nodejs/node/commit/ead05aad2a)] - **doc**: fix typo in recognizing-contributors (Marco Ippolito) [#53990](https://github.com/nodejs/node/pull/53990) +- \[[`25e59aebac`](https://github.com/nodejs/node/commit/25e59aebac)] - **doc**: update boxstarter README (Aviv Keller) [#53785](https://github.com/nodejs/node/pull/53785) +- \[[`a3183fb927`](https://github.com/nodejs/node/commit/a3183fb927)] - **doc**: add info about prefix-only modules to `module.builtinModules` (Grigory) [#53954](https://github.com/nodejs/node/pull/53954) +- \[[`89599e025f`](https://github.com/nodejs/node/commit/89599e025f)] - **doc**: remove `scroll-behavior: smooth;` (Cloyd Lau) [#53942](https://github.com/nodejs/node/pull/53942) +- \[[`139c62e40c`](https://github.com/nodejs/node/commit/139c62e40c)] - **doc**: move --test-coverage-{ex,in}clude to proper location (Colin Ihrig) [#53926](https://github.com/nodejs/node/pull/53926) +- \[[`233aba90ea`](https://github.com/nodejs/node/commit/233aba90ea)] - **doc**: update `api_assets` README for new files (Aviv Keller) [#53676](https://github.com/nodejs/node/pull/53676) +- \[[`44a1cbe98a`](https://github.com/nodejs/node/commit/44a1cbe98a)] - **doc**: add MattiasBuelens to collaborators (Mattias Buelens) [#53895](https://github.com/nodejs/node/pull/53895) +- \[[`f5280ddbc5`](https://github.com/nodejs/node/commit/f5280ddbc5)] - **doc**: fix casing of GitHub handle for two collaborators (Antoine du Hamel) [#53857](https://github.com/nodejs/node/pull/53857) +- \[[`9224e3eef1`](https://github.com/nodejs/node/commit/9224e3eef1)] - **doc**: update release-post nodejs.org script (Rafael Gonzaga) [#53762](https://github.com/nodejs/node/pull/53762) +- \[[`f87eed8de4`](https://github.com/nodejs/node/commit/f87eed8de4)] - **doc**: move MylesBorins to emeritus (Myles Borins) [#53760](https://github.com/nodejs/node/pull/53760) +- \[[`32ac80ae8d`](https://github.com/nodejs/node/commit/32ac80ae8d)] - **doc**: add Rafael to the last security release (Rafael Gonzaga) [#53769](https://github.com/nodejs/node/pull/53769) +- \[[`e71aa7e98b`](https://github.com/nodejs/node/commit/e71aa7e98b)] - **doc**: use mock.callCount() in examples (Sébastien Règne) [#53754](https://github.com/nodejs/node/pull/53754) +- \[[`f64db24312`](https://github.com/nodejs/node/commit/f64db24312)] - **doc**: clarify authenticity of plaintexts in update (Tobias Nießen) [#53784](https://github.com/nodejs/node/pull/53784) +- \[[`51e736ac83`](https://github.com/nodejs/node/commit/51e736ac83)] - **doc**: add option to have support me link (Michael Dawson) [#53312](https://github.com/nodejs/node/pull/53312) +- \[[`9804731d0f`](https://github.com/nodejs/node/commit/9804731d0f)] - **doc**: update `scroll-padding-top` to 4rem (Cloyd Lau) [#53662](https://github.com/nodejs/node/pull/53662) +- \[[`229f7f8b8a`](https://github.com/nodejs/node/commit/229f7f8b8a)] - **doc**: mention v8.setFlagsFromString to pm (Rafael Gonzaga) [#53731](https://github.com/nodejs/node/pull/53731) +- \[[`98d59aa929`](https://github.com/nodejs/node/commit/98d59aa929)] - **doc**: remove the last \
 tag (Claudio W) [#53741](https://github.com/nodejs/node/pull/53741)
+- \[[`60ee41df08`](https://github.com/nodejs/node/commit/60ee41df08)] - **doc**: exclude voting and regular TSC from spotlight (Michael Dawson) [#53694](https://github.com/nodejs/node/pull/53694)
+- \[[`c3536cfa99`](https://github.com/nodejs/node/commit/c3536cfa99)] - **doc**: fix releases guide for recent Git versions (Michaël Zasso) [#53709](https://github.com/nodejs/node/pull/53709)
+- \[[`3b632e1871`](https://github.com/nodejs/node/commit/3b632e1871)] - **doc**: require `node:process` in assert doc examples (Alfredo González) [#53702](https://github.com/nodejs/node/pull/53702)
+- \[[`754090c110`](https://github.com/nodejs/node/commit/754090c110)] - **doc**: add additional explanation to the wildcard section in permissions (jakecastelli) [#53664](https://github.com/nodejs/node/pull/53664)
+- \[[`4346de7267`](https://github.com/nodejs/node/commit/4346de7267)] - **doc**: mark NODE_MODULE_VERSION for Node.js 22.0.0 (Michaël Zasso) [#53650](https://github.com/nodejs/node/pull/53650)
+- \[[`758178bd72`](https://github.com/nodejs/node/commit/758178bd72)] - **doc**: include node.module_timer on available categories (Vinicius Lourenço) [#53638](https://github.com/nodejs/node/pull/53638)
+- \[[`e0d213df2b`](https://github.com/nodejs/node/commit/e0d213df2b)] - **doc**: fix module customization hook examples (Elliot Goodrich) [#53637](https://github.com/nodejs/node/pull/53637)
+- \[[`43ac5a2441`](https://github.com/nodejs/node/commit/43ac5a2441)] - **doc**: fix doc for correct usage with plan & TestContext (Emil Tayeb) [#53615](https://github.com/nodejs/node/pull/53615)
+- \[[`5076f0d292`](https://github.com/nodejs/node/commit/5076f0d292)] - **doc**: remove some news issues that are no longer (Michael Dawson) [#53608](https://github.com/nodejs/node/pull/53608)
+- \[[`c997dbef34`](https://github.com/nodejs/node/commit/c997dbef34)] - **doc**: add issue for news from ambassadors (Michael Dawson) [#53607](https://github.com/nodejs/node/pull/53607)
+- \[[`16d55f1d25`](https://github.com/nodejs/node/commit/16d55f1d25)] - **doc**: add esm example for os (Leonardo Peixoto) [#53604](https://github.com/nodejs/node/pull/53604)
+- \[[`156fc536f2`](https://github.com/nodejs/node/commit/156fc536f2)] - **doc**: clarify usage of coverage reporters (Eliphaz Bouye) [#53523](https://github.com/nodejs/node/pull/53523)
+- \[[`f8f247bc99`](https://github.com/nodejs/node/commit/f8f247bc99)] - **doc**: document addition testing options (Aviv Keller) [#53569](https://github.com/nodejs/node/pull/53569)
+- \[[`73860aca56`](https://github.com/nodejs/node/commit/73860aca56)] - **doc**: clarify that fs.exists() may return false for existing symlink (Tobias Nießen) [#53566](https://github.com/nodejs/node/pull/53566)
+- \[[`59c5c5c73e`](https://github.com/nodejs/node/commit/59c5c5c73e)] - **doc**: note http.closeAllConnections excludes upgraded sockets (Rob Hogan) [#53560](https://github.com/nodejs/node/pull/53560)
+- \[[`1cd3c8eb27`](https://github.com/nodejs/node/commit/1cd3c8eb27)] - **doc**: fix typo (EhsanKhaki) [#53397](https://github.com/nodejs/node/pull/53397)
+- \[[`3c5e593e2a`](https://github.com/nodejs/node/commit/3c5e593e2a)] - **doc, meta**: add PTAL to glossary (Aviv Keller) [#53770](https://github.com/nodejs/node/pull/53770)
+- \[[`f336e61257`](https://github.com/nodejs/node/commit/f336e61257)] - **doc, test**: tracing channel hasSubscribers getter (Thomas Hunter II) [#52908](https://github.com/nodejs/node/pull/52908)
+- \[[`4187b81439`](https://github.com/nodejs/node/commit/4187b81439)] - **doc, typings**: events.once accepts symbol event type (René) [#53542](https://github.com/nodejs/node/pull/53542)
+- \[[`3cdf94d403`](https://github.com/nodejs/node/commit/3cdf94d403)] - **doc,tty**: add documentation for ReadStream and WriteStream (jakecastelli) [#53567](https://github.com/nodejs/node/pull/53567)
+- \[[`5d03f6fab7`](https://github.com/nodejs/node/commit/5d03f6fab7)] - **esm**: move hooks test with others (Geoffrey Booth) [#53558](https://github.com/nodejs/node/pull/53558)
+- \[[`490f15a99b`](https://github.com/nodejs/node/commit/490f15a99b)] - **fs**: ensure consistency for mkdtemp in both fs and fs/promises (YieldRay) [#53776](https://github.com/nodejs/node/pull/53776)
+- \[[`8e64c02b19`](https://github.com/nodejs/node/commit/8e64c02b19)] - **(SEMVER-MINOR)** **http**: add diagnostics channel `http.client.request.error` (Kohei Ueno) [#54054](https://github.com/nodejs/node/pull/54054)
+- \[[`0d70c79ebf`](https://github.com/nodejs/node/commit/0d70c79ebf)] - **lib**: optimize copyError with ObjectAssign in primordials (HEESEUNG) [#53999](https://github.com/nodejs/node/pull/53999)
+- \[[`a4ff2ac0f0`](https://github.com/nodejs/node/commit/a4ff2ac0f0)] - **lib**: improve cluster/primary code (Ehsan Khakifirooz) [#53756](https://github.com/nodejs/node/pull/53756)
+- \[[`c667fbd988`](https://github.com/nodejs/node/commit/c667fbd988)] - **lib**: improve error message when index not found on cjs (Vinicius Lourenço) [#53859](https://github.com/nodejs/node/pull/53859)
+- \[[`51ba566171`](https://github.com/nodejs/node/commit/51ba566171)] - **lib**: decorate async stack trace in source maps (Chengzhong Wu) [#53860](https://github.com/nodejs/node/pull/53860)
+- \[[`d012dd3d29`](https://github.com/nodejs/node/commit/d012dd3d29)] - **lib**: remove path.resolve from permissions.js (Rafael Gonzaga) [#53729](https://github.com/nodejs/node/pull/53729)
+- \[[`1e9ff50446`](https://github.com/nodejs/node/commit/1e9ff50446)] - **lib**: add toJSON to PerformanceMeasure (theanarkh) [#53603](https://github.com/nodejs/node/pull/53603)
+- \[[`3a2d8bffa5`](https://github.com/nodejs/node/commit/3a2d8bffa5)] - **lib**: convert WeakMaps in cjs loader with private symbol properties (Chengzhong Wu) [#52095](https://github.com/nodejs/node/pull/52095)
+- \[[`e326342bd7`](https://github.com/nodejs/node/commit/e326342bd7)] - **meta**: add `sqlite` to js subsystems (Alex Yang) [#53911](https://github.com/nodejs/node/pull/53911)
+- \[[`bfabfb4d17`](https://github.com/nodejs/node/commit/bfabfb4d17)] - **meta**: move tsc member to emeritus (Michael Dawson) [#54029](https://github.com/nodejs/node/pull/54029)
+- \[[`ae30674991`](https://github.com/nodejs/node/commit/ae30674991)] - **meta**: add jake to collaborators (jakecastelli) [#54004](https://github.com/nodejs/node/pull/54004)
+- \[[`6ca0cfc602`](https://github.com/nodejs/node/commit/6ca0cfc602)] - **meta**: remove license for hljs (Aviv Keller) [#53970](https://github.com/nodejs/node/pull/53970)
+- \[[`e6ba121e83`](https://github.com/nodejs/node/commit/e6ba121e83)] - **meta**: make more bug-report information required (Aviv Keller) [#53718](https://github.com/nodejs/node/pull/53718)
+- \[[`1864cddd0c`](https://github.com/nodejs/node/commit/1864cddd0c)] - **meta**: store actions secrets in environment (Aviv Keller) [#53930](https://github.com/nodejs/node/pull/53930)
+- \[[`c0b24e5071`](https://github.com/nodejs/node/commit/c0b24e5071)] - **meta**: move anonrig to tsc voting members (Yagiz Nizipli) [#53888](https://github.com/nodejs/node/pull/53888)
+- \[[`e60b089f7f`](https://github.com/nodejs/node/commit/e60b089f7f)] - **meta**: remove redudant logging from dep updaters (Aviv Keller) [#53783](https://github.com/nodejs/node/pull/53783)
+- \[[`bff6995ec3`](https://github.com/nodejs/node/commit/bff6995ec3)] - **meta**: change email address of anonrig (Yagiz Nizipli) [#53829](https://github.com/nodejs/node/pull/53829)
+- \[[`c2bb46020a`](https://github.com/nodejs/node/commit/c2bb46020a)] - **meta**: add `node_sqlite.c` to PR label config (Aviv Keller) [#53797](https://github.com/nodejs/node/pull/53797)
+- \[[`b8d2bbc6d6`](https://github.com/nodejs/node/commit/b8d2bbc6d6)] - **meta**: move one or more collaborators to emeritus (Node.js GitHub Bot) [#53758](https://github.com/nodejs/node/pull/53758)
+- \[[`0ad4b7c1f7`](https://github.com/nodejs/node/commit/0ad4b7c1f7)] - **meta**: use HTML entities in commit-queue comment (Aviv Keller) [#53744](https://github.com/nodejs/node/pull/53744)
+- \[[`aa0c5c25d1`](https://github.com/nodejs/node/commit/aa0c5c25d1)] - **meta**: move regular TSC member to emeritus (Michael Dawson) [#53693](https://github.com/nodejs/node/pull/53693)
+- \[[`a5f5b4550b`](https://github.com/nodejs/node/commit/a5f5b4550b)] - **meta**: bump codecov/codecov-action from 4.4.1 to 4.5.0 (dependabot\[bot]) [#53675](https://github.com/nodejs/node/pull/53675)
+- \[[`f84e215c90`](https://github.com/nodejs/node/commit/f84e215c90)] - **meta**: bump mozilla-actions/sccache-action from 0.0.4 to 0.0.5 (dependabot\[bot]) [#53674](https://github.com/nodejs/node/pull/53674)
+- \[[`d5a9c249d3`](https://github.com/nodejs/node/commit/d5a9c249d3)] - **meta**: bump github/codeql-action from 3.25.7 to 3.25.11 (dependabot\[bot]) [#53673](https://github.com/nodejs/node/pull/53673)
+- \[[`39d6c780c8`](https://github.com/nodejs/node/commit/39d6c780c8)] - **meta**: bump actions/checkout from 4.1.6 to 4.1.7 (dependabot\[bot]) [#53672](https://github.com/nodejs/node/pull/53672)
+- \[[`bb6fe38a34`](https://github.com/nodejs/node/commit/bb6fe38a34)] - **meta**: bump peter-evans/create-pull-request from 6.0.5 to 6.1.0 (dependabot\[bot]) [#53671](https://github.com/nodejs/node/pull/53671)
+- \[[`5dcdfb5e6b`](https://github.com/nodejs/node/commit/5dcdfb5e6b)] - **meta**: bump step-security/harden-runner from 2.8.0 to 2.8.1 (dependabot\[bot]) [#53670](https://github.com/nodejs/node/pull/53670)
+- \[[`44d901a1c9`](https://github.com/nodejs/node/commit/44d901a1c9)] - **meta**: move member from TSC regular to emeriti (Michael Dawson) [#53599](https://github.com/nodejs/node/pull/53599)
+- \[[`0c91186afa`](https://github.com/nodejs/node/commit/0c91186afa)] - **meta**: warnings bypass deprecation cycle (Benjamin Gruenbaum) [#53513](https://github.com/nodejs/node/pull/53513)
+- \[[`bcd08bef60`](https://github.com/nodejs/node/commit/bcd08bef60)] - **meta**: prevent constant references to issues in versioning (Aviv Keller) [#53564](https://github.com/nodejs/node/pull/53564)
+- \[[`7625dc4927`](https://github.com/nodejs/node/commit/7625dc4927)] - **module**: fix submodules loaded by require() and import() (Joyee Cheung) [#52487](https://github.com/nodejs/node/pull/52487)
+- \[[`6c4f4772e3`](https://github.com/nodejs/node/commit/6c4f4772e3)] - **module**: tidy code and comments (Jacob Smith) [#52437](https://github.com/nodejs/node/pull/52437)
+- \[[`51b88faeac`](https://github.com/nodejs/node/commit/51b88faeac)] - **module**: disallow CJS <-> ESM edges in a cycle from require(esm) (Joyee Cheung) [#52264](https://github.com/nodejs/node/pull/52264)
+- \[[`4dae68ced4`](https://github.com/nodejs/node/commit/4dae68ced4)] - **module**: centralize SourceTextModule compilation for builtin loader (Joyee Cheung) [#52291](https://github.com/nodejs/node/pull/52291)
+- \[[`cad46afc07`](https://github.com/nodejs/node/commit/cad46afc07)] - **(SEMVER-MINOR)** **module**: support require()ing synchronous ESM graphs (Joyee Cheung) [#51977](https://github.com/nodejs/node/pull/51977)
+- \[[`ac58c829a1`](https://github.com/nodejs/node/commit/ac58c829a1)] - **node-api**: add property keys benchmark (Chengzhong Wu) [#54012](https://github.com/nodejs/node/pull/54012)
+- \[[`e6a4104bd1`](https://github.com/nodejs/node/commit/e6a4104bd1)] - **node-api**: rename nogc to basic (Gabriel Schulhof) [#53830](https://github.com/nodejs/node/pull/53830)
+- \[[`57b8b8e18e`](https://github.com/nodejs/node/commit/57b8b8e18e)] - **(SEMVER-MINOR)** **path**: add `matchesGlob` method (Aviv Keller) [#52881](https://github.com/nodejs/node/pull/52881)
+- \[[`bf6aa53299`](https://github.com/nodejs/node/commit/bf6aa53299)] - **process**: unify experimental warning messages (Aviv Keller) [#53704](https://github.com/nodejs/node/pull/53704)
+- \[[`2a3ae16e62`](https://github.com/nodejs/node/commit/2a3ae16e62)] - **src**: expose LookupAndCompile with parameters (Shelley Vohr) [#53886](https://github.com/nodejs/node/pull/53886)
+- \[[`0109f9c961`](https://github.com/nodejs/node/commit/0109f9c961)] - **src**: simplify AESCipherTraits::AdditionalConfig (Tobias Nießen) [#53890](https://github.com/nodejs/node/pull/53890)
+- \[[`6bafe8a457`](https://github.com/nodejs/node/commit/6bafe8a457)] - **src**: fix -Wshadow warning (Shelley Vohr) [#53885](https://github.com/nodejs/node/pull/53885)
+- \[[`4c36d6c47a`](https://github.com/nodejs/node/commit/4c36d6c47a)] - **src**: fix slice of slice of file-backed Blob (Josh Lee) [#53972](https://github.com/nodejs/node/pull/53972)
+- \[[`848c2d59fb`](https://github.com/nodejs/node/commit/848c2d59fb)] - **src**: cache invariant code motion (Rafael Gonzaga) [#53879](https://github.com/nodejs/node/pull/53879)
+- \[[`acaf5dd1cd`](https://github.com/nodejs/node/commit/acaf5dd1cd)] - **src**: avoid strcmp in ImportJWKAsymmetricKey (Tobias Nießen) [#53813](https://github.com/nodejs/node/pull/53813)
+- \[[`b71250aaf9`](https://github.com/nodejs/node/commit/b71250aaf9)] - **src**: replace ToLocalChecked uses with ToLocal in node-file (James M Snell) [#53869](https://github.com/nodejs/node/pull/53869)
+- \[[`aff9a5339a`](https://github.com/nodejs/node/commit/aff9a5339a)] - **src**: fix env-file flag to ignore spaces before quotes (Mohit Malhotra) [#53786](https://github.com/nodejs/node/pull/53786)
+- \[[`e352a4ef27`](https://github.com/nodejs/node/commit/e352a4ef27)] - **src**: update outdated references to spec sections (Tobias Nießen) [#53832](https://github.com/nodejs/node/pull/53832)
+- \[[`1a4da22a60`](https://github.com/nodejs/node/commit/1a4da22a60)] - **src**: use Maybe\ in ManagedEVPPKey (Tobias Nießen) [#53811](https://github.com/nodejs/node/pull/53811)
+- \[[`0c24b91bd2`](https://github.com/nodejs/node/commit/0c24b91bd2)] - **src**: fix error handling in ExportJWKAsymmetricKey (Tobias Nießen) [#53767](https://github.com/nodejs/node/pull/53767)
+- \[[`81cd84c716`](https://github.com/nodejs/node/commit/81cd84c716)] - **src**: use Maybe\ in node::crypto::error (Tobias Nießen) [#53766](https://github.com/nodejs/node/pull/53766)
+- \[[`8135f3616d`](https://github.com/nodejs/node/commit/8135f3616d)] - **src**: fix typo in node.h (Daeyeon Jeong) [#53759](https://github.com/nodejs/node/pull/53759)
+- \[[`e6d735a997`](https://github.com/nodejs/node/commit/e6d735a997)] - **src**: document the Node.js context embedder data (Joyee Cheung) [#53611](https://github.com/nodejs/node/pull/53611)
+- \[[`584beaa2ed`](https://github.com/nodejs/node/commit/584beaa2ed)] - **src**: zero-initialize data that are copied into the snapshot (Joyee Cheung) [#53563](https://github.com/nodejs/node/pull/53563)
+- \[[`ef5dabd8c6`](https://github.com/nodejs/node/commit/ef5dabd8c6)] - **src**: fix Worker termination when '--inspect-brk' is passed (Daeyeon Jeong) [#53724](https://github.com/nodejs/node/pull/53724)
+- \[[`62f4f6f48e`](https://github.com/nodejs/node/commit/62f4f6f48e)] - **src**: remove ArrayBufferAllocator::Reallocate override (Shu-yu Guo) [#52910](https://github.com/nodejs/node/pull/52910)
+- \[[`a6dd8643fa`](https://github.com/nodejs/node/commit/a6dd8643fa)] - **src**: reduce unnecessary serialization of CLI options in C++ (Joyee Cheung) [#52451](https://github.com/nodejs/node/pull/52451)
+- \[[`31fdb881cf`](https://github.com/nodejs/node/commit/31fdb881cf)] - **src,lib**: expose getCategoryEnabledBuffer to use on node.http (Vinicius Lourenço) [#53602](https://github.com/nodejs/node/pull/53602)
+- \[[`2eea8502e1`](https://github.com/nodejs/node/commit/2eea8502e1)] - **src,test**: further cleanup references to osx (Daniel Bayley) [#53820](https://github.com/nodejs/node/pull/53820)
+- \[[`7c21bb99a5`](https://github.com/nodejs/node/commit/7c21bb99a5)] - **(SEMVER-MINOR)** **stream**: expose DuplexPair API (Austin Wright) [#34111](https://github.com/nodejs/node/pull/34111)
+- \[[`56299f7309`](https://github.com/nodejs/node/commit/56299f7309)] - **stream**: improve inspector ergonomics (Benjamin Gruenbaum) [#53800](https://github.com/nodejs/node/pull/53800)
+- \[[`9b82b15230`](https://github.com/nodejs/node/commit/9b82b15230)] - **stream**: update ongoing promise in async iterator return() method (Mattias Buelens) [#52657](https://github.com/nodejs/node/pull/52657)
+- \[[`4a3ecbfc9b`](https://github.com/nodejs/node/commit/4a3ecbfc9b)] - **(SEMVER-MINOR)** **stream**: implement `min` option for `ReadableStreamBYOBReader.read` (Mattias Buelens) [#50888](https://github.com/nodejs/node/pull/50888)
+- \[[`bd996bf694`](https://github.com/nodejs/node/commit/bd996bf694)] - **test**: do not swallow uncaughtException errors in exit code tests (Meghan Denny) [#54039](https://github.com/nodejs/node/pull/54039)
+- \[[`77761af077`](https://github.com/nodejs/node/commit/77761af077)] - **test**: move shared module to `test/common` (Rich Trott) [#54042](https://github.com/nodejs/node/pull/54042)
+- \[[`bec88ce138`](https://github.com/nodejs/node/commit/bec88ce138)] - **test**: skip sea tests with more accurate available disk space estimation (Chengzhong Wu) [#53996](https://github.com/nodejs/node/pull/53996)
+- \[[`9a98ad47cd`](https://github.com/nodejs/node/commit/9a98ad47cd)] - **test**: remove unnecessary console log (KAYYY) [#53812](https://github.com/nodejs/node/pull/53812)
+- \[[`364d09cf0a`](https://github.com/nodejs/node/commit/364d09cf0a)] - **test**: add comments and rename test for timer robustness (Rich Trott) [#54008](https://github.com/nodejs/node/pull/54008)
+- \[[`5c5093dc0a`](https://github.com/nodejs/node/commit/5c5093dc0a)] - **test**: add test for one arg timers to increase coverage (Carlos Espa) [#54007](https://github.com/nodejs/node/pull/54007)
+- \[[`43ede1ae0b`](https://github.com/nodejs/node/commit/43ede1ae0b)] - **test**: mark 'test/parallel/test-sqlite.js' as flaky (Colin Ihrig) [#54031](https://github.com/nodejs/node/pull/54031)
+- \[[`0ad783cb42`](https://github.com/nodejs/node/commit/0ad783cb42)] - **test**: mark test-pipe-file-to-http as flaky (jakecastelli) [#53751](https://github.com/nodejs/node/pull/53751)
+- \[[`f2b4fd3544`](https://github.com/nodejs/node/commit/f2b4fd3544)] - **test**: compare paths on Windows without considering case (Early Riser) [#53993](https://github.com/nodejs/node/pull/53993)
+- \[[`2e69e5f4d2`](https://github.com/nodejs/node/commit/2e69e5f4d2)] - **test**: skip sea tests in large debug builds (Chengzhong Wu) [#53918](https://github.com/nodejs/node/pull/53918)
+- \[[`56c26fe6e5`](https://github.com/nodejs/node/commit/56c26fe6e5)] - **test**: skip --title check on IBM i (Abdirahim Musse) [#53952](https://github.com/nodejs/node/pull/53952)
+- \[[`6d0b8ded00`](https://github.com/nodejs/node/commit/6d0b8ded00)] - **test**: reduce flakiness of `test-assert-esm-cjs-message-verify` (Antoine du Hamel) [#53967](https://github.com/nodejs/node/pull/53967)
+- \[[`edb75aebd7`](https://github.com/nodejs/node/commit/edb75aebd7)] - **test**: use `PYTHON` executable from env in `assertSnapshot` (Antoine du Hamel) [#53938](https://github.com/nodejs/node/pull/53938)
+- \[[`be94e470a6`](https://github.com/nodejs/node/commit/be94e470a6)] - **test**: deflake test-blob-file-backed (Luigi Pinca) [#53920](https://github.com/nodejs/node/pull/53920)
+- \[[`c2b0dcd165`](https://github.com/nodejs/node/commit/c2b0dcd165)] - **test**: un-set inspector-async-hook-setup-at-inspect-brk as flaky (Abdirahim Musse) [#53692](https://github.com/nodejs/node/pull/53692)
+- \[[`6dc18981ac`](https://github.com/nodejs/node/commit/6dc18981ac)] - **test**: use python3 instead of python in pummel test (Mathis Wiehl) [#53057](https://github.com/nodejs/node/pull/53057)
+- \[[`662bf524e1`](https://github.com/nodejs/node/commit/662bf524e1)] - **test**: do not assume cwd in snapshot tests (Antoine du Hamel) [#53146](https://github.com/nodejs/node/pull/53146)
+- \[[`a07526702a`](https://github.com/nodejs/node/commit/a07526702a)] - **test**: fix OpenSSL version checks (Richard Lau) [#53503](https://github.com/nodejs/node/pull/53503)
+- \[[`2b70018d11`](https://github.com/nodejs/node/commit/2b70018d11)] - **test**: refactor, add assertion to http-request-end (jakecastelli) [#53411](https://github.com/nodejs/node/pull/53411)
+- \[[`c0262c1561`](https://github.com/nodejs/node/commit/c0262c1561)] - **test_runner**: switched to internal readline interface (Emil Tayeb) [#54000](https://github.com/nodejs/node/pull/54000)
+- \[[`fb7342246c`](https://github.com/nodejs/node/commit/fb7342246c)] - **test_runner**: do not throw on mocked clearTimeout() (Aksinya Bykova) [#54005](https://github.com/nodejs/node/pull/54005)
+- \[[`367f9e77f3`](https://github.com/nodejs/node/commit/367f9e77f3)] - **test_runner**: cleanup global event listeners after run (Eddie Abbondanzio) [#53878](https://github.com/nodejs/node/pull/53878)
+- \[[`206c668ee7`](https://github.com/nodejs/node/commit/206c668ee7)] - **test_runner**: remove plan option from run() (Colin Ihrig) [#53834](https://github.com/nodejs/node/pull/53834)
+- \[[`8660d481e5`](https://github.com/nodejs/node/commit/8660d481e5)] - **tls**: add setKeyCert() to tls.Socket (Brian White) [#53636](https://github.com/nodejs/node/pull/53636)
+- \[[`9c5beabd83`](https://github.com/nodejs/node/commit/9c5beabd83)] - **tools**: fix `SLACK_TITLE` in invalid commit workflow (Antoine du Hamel) [#53912](https://github.com/nodejs/node/pull/53912)
+- \[[`4dedf2aead`](https://github.com/nodejs/node/commit/4dedf2aead)] - **tools**: update lint-md-dependencies (Node.js GitHub Bot) [#53840](https://github.com/nodejs/node/pull/53840)
+- \[[`642d5c5d30`](https://github.com/nodejs/node/commit/642d5c5d30)] - **tools**: use v8_features.json to populate config.gypi (Cheng) [#53749](https://github.com/nodejs/node/pull/53749)
+- \[[`031206544d`](https://github.com/nodejs/node/commit/031206544d)] - **tools**: update lint-md-dependencies to unified\@11.0.5 (Node.js GitHub Bot) [#53555](https://github.com/nodejs/node/pull/53555)
+- \[[`8404421ea6`](https://github.com/nodejs/node/commit/8404421ea6)] - **tools**: replace reference to NodeMainInstance with SnapshotBuilder (codediverdev) [#53544](https://github.com/nodejs/node/pull/53544)
+- \[[`2d8490fed5`](https://github.com/nodejs/node/commit/2d8490fed5)] - **typings**: add `fs_dir` types (Yagiz Nizipli) [#53631](https://github.com/nodejs/node/pull/53631)
+- \[[`325eae0b3f`](https://github.com/nodejs/node/commit/325eae0b3f)] - **url**: fix typo (KAYYY) [#53827](https://github.com/nodejs/node/pull/53827)
+- \[[`7fc45f5e3f`](https://github.com/nodejs/node/commit/7fc45f5e3f)] - **url**: reduce unnecessary string copies (Yagiz Nizipli) [#53628](https://github.com/nodejs/node/pull/53628)
+- \[[`1d961facf1`](https://github.com/nodejs/node/commit/1d961facf1)] - **url**: add missing documentation for `URL.parse()` (Yagiz Nizipli) [#53733](https://github.com/nodejs/node/pull/53733)
+- \[[`ce877c6d0f`](https://github.com/nodejs/node/commit/ce877c6d0f)] - **util**: fix crashing when emitting new Buffer() deprecation warning #53075 (Aras Abbasi) [#53089](https://github.com/nodejs/node/pull/53089)
+- \[[`d6d04279ca`](https://github.com/nodejs/node/commit/d6d04279ca)] - **worker**: allow copied NODE_OPTIONS in the env setting (Joyee Cheung) [#53596](https://github.com/nodejs/node/pull/53596)
+
+Windows 32-bit Installer: https://nodejs.org/dist/v20.17.0/node-v20.17.0-x86.msi \
+Windows 64-bit Installer: https://nodejs.org/dist/v20.17.0/node-v20.17.0-x64.msi \
+Windows ARM 64-bit Installer: https://nodejs.org/dist/v20.17.0/node-v20.17.0-arm64.msi \
+Windows 32-bit Binary: https://nodejs.org/dist/v20.17.0/win-x86/node.exe \
+Windows 64-bit Binary: https://nodejs.org/dist/v20.17.0/win-x64/node.exe \
+Windows ARM 64-bit Binary: https://nodejs.org/dist/v20.17.0/win-arm64/node.exe \
+macOS 64-bit Installer: https://nodejs.org/dist/v20.17.0/node-v20.17.0.pkg \
+macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-darwin-arm64.tar.gz \
+macOS Intel 64-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-darwin-x64.tar.gz \
+Linux 64-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-linux-x64.tar.xz \
+Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-linux-ppc64le.tar.xz \
+Linux s390x 64-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-linux-s390x.tar.xz \
+AIX 64-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-aix-ppc64.tar.gz \
+ARMv7 32-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-linux-armv7l.tar.xz \
+ARMv8 64-bit Binary: https://nodejs.org/dist/v20.17.0/node-v20.17.0-linux-arm64.tar.xz \
+Source Code: https://nodejs.org/dist/v20.17.0/node-v20.17.0.tar.gz \
+Other release files: https://nodejs.org/dist/v20.17.0/ \
+Documentation: https://nodejs.org/docs/v20.17.0/api/
+
+### SHASUMS
+
+```
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+44e9bddedf7b6b21917174a7707d737cfa0ef61f9ecb06baf6dc1a208d41d54b  node-v20.17.0-aix-ppc64.tar.gz
+90615bfecf9129f610f36323cf8f97205010f2cc5b5b475eec7266f2514a522d  node-v20.17.0-arm64.msi
+476324108c4361935465631eec47df1c943ba2c87bc050853385b1d1c71f0b1f  node-v20.17.0-darwin-arm64.tar.gz
+c35696d723c9802c6d074abcdd6dc58ac338e1bb2c5692edcbbb2c6dc8d23918  node-v20.17.0-darwin-arm64.tar.xz
+eefe9447dbb0b5b233d42730989c6c364487de4043145db2f63da94e9623c380  node-v20.17.0-darwin-x64.tar.gz
+17b80ee0710388343b41b62289d1482b40b7627c4755c25ba7e097104728dd7e  node-v20.17.0-darwin-x64.tar.xz
+ccd809842e50cac60c33c4296f0ab8335190e265644961228a982c939420bded  node-v20.17.0-headers.tar.gz
+8f3e341ad34061dd24e70c2ffc317a0386db5bdbdad4bff73acd16f45b58c39f  node-v20.17.0-headers.tar.xz
+18afbf2781edfcc9918343f4bf74a8c35d74d778b85d40a0c09b232adc0ea82c  node-v20.17.0-linux-arm64.tar.gz
+7ebbb636c23f89dbf66648e227fbd0998ce33db4c588520256425102d97dd1a4  node-v20.17.0-linux-arm64.tar.xz
+fcc19311817622f2e4693c3fff488c72fa1ce7c2c423c2bd114c86b24fa8c388  node-v20.17.0-linux-armv7l.tar.gz
+56a0c0a4cd00fbd8bf78f10163872b57a53177cbd1727f7303e0cf9a2c4aa183  node-v20.17.0-linux-armv7l.tar.xz
+8ab306fa954887bcd9718c61eb91110df37a791dce3097dd249481654b3b663f  node-v20.17.0-linux-ppc64le.tar.gz
+5de1314b090bb95d63a246920baa84c10ed6d60740f28127ce57cda7f13eddc2  node-v20.17.0-linux-ppc64le.tar.xz
+7ad50f3aa8f07e7ef2167fa6bb28c850dc6497b633c4ec8c4815f29c53a124b0  node-v20.17.0-linux-s390x.tar.gz
+0b2bd20c0047b48da55b87b041971b44f7e31a3d6af6b4b435e4c9203c4c2176  node-v20.17.0-linux-s390x.tar.xz
+21e656f6f4e34080ddc5d75fbfe58ce8482fe6e70a76aeae14afdcdc1e23079d  node-v20.17.0-linux-x64.tar.gz
+a24db3dcd151a52e75965dba04cf1b3cd579ff30d6e0af9da1aede4d0f17486b  node-v20.17.0-linux-x64.tar.xz
+5a3be48bcfef34daffc48523e89978efdc13a5ceb096b3e9ff3225dcd2142a2f  node-v20.17.0.pkg
+409bda5f1896c7c20866610d778d1760991884ad2e7940837cd3f2854cf73747  node-v20.17.0.tar.gz
+9abf03ac23362c60387ebb633a516303637145cb3c177be3348b16880fd8b28c  node-v20.17.0.tar.xz
+326cb8176f5fd64ce4cf0cd6d96c41ef4bfb2a6599763e5a55e6f61816d40b58  node-v20.17.0-win-arm64.7z
+ccbee71708ae6ac7dd30dd3db6447eba4aa3009db7408defbd660cedf01fd011  node-v20.17.0-win-arm64.zip
+d0e84c8afb6e57301904339501d62e4d817575367219f71bf34a5069999ae3c8  node-v20.17.0-win-x64.7z
+e323fff0aba197090faabd29c4c23f334557ff24454324f0c83faa7e399dbb74  node-v20.17.0-win-x64.zip
+c363fa469754fcf3f387e483df9292994a2335fb4abf2f933249c22b76037245  node-v20.17.0-win-x86.7z
+1b312404460d56c6f98b1dbd585d1591b0a6881473694032f5300dd2a213a3d5  node-v20.17.0-win-x86.zip
+8ba4cf21d15bf47cf36d77a41058d12f8a7b4d333164618f3b2e6a52a1f226d5  node-v20.17.0-x64.msi
+9875a94ac32b6306f63fbed534d64b095c15f3d252e3adcc5b34367ffe61c7e6  node-v20.17.0-x86.msi
+6f9118a87189bc101160929a94ddc6b999c30228da7d3d97c2b15eb11b258b95  win-arm64/node.exe
+a4f01329c1c211082ac3ed387ff6651530040bbf7250ec419ce8f95b10d7804a  win-arm64/node.lib
+15eaa91d41ff5e04e53df9424b31ba06a403f455f228bf70cbdf5af53e698cdb  win-arm64/node_pdb.7z
+a7194203b87c3b6df5ba84b02e87d2229dc2936a30504bfb25a5148e683cfcce  win-arm64/node_pdb.zip
+0740b4a681b320f966b57f51c87c11f897e8605064b6ae62d03e177bc66f01b9  win-x64/node.exe
+87056190b7cd06f40058f8e059efd328cdcc7600b825afa102c0aa5039865af5  win-x64/node.lib
+2665b002b385a3728fb1fdae4e032b28b470b7883dc367608ddc7311641f7993  win-x64/node_pdb.7z
+918ab1cf69336002833a4d2b2eaf4ab3b1b7afecc4697d61c97e9ef2069770e3  win-x64/node_pdb.zip
+7a68553c03cc976e71a69fb41fe0604d978df5471e8057c62f179f43f7078ed4  win-x86/node.exe
+fa02ae7feca7eb6c4a0f1b929126df400719f5d18a2ec4b7d12c52fbe0b13814  win-x86/node.lib
+173478c1c4d453e46ebadbc215034c49bd91a4ec0a25cd5d4ed32911d3bf890d  win-x86/node_pdb.7z
+27d903bc29b7ef1367c4a058482c49e6b81f1f095ae9752c3311e03b8290079c  win-x86/node_pdb.zip
+-----BEGIN PGP SIGNATURE-----
+
+iQIzBAEBCAAdFiEEzGj1oxBv9EgyLkjtJ/XjjVsKIV8FAmbGIHgACgkQJ/XjjVsK
+IV8eZhAAhvi9NdMWh8NR+7WJJRVT7aUWQC9pzXFtGFnyW+yOSsF0ciiuuXa913VX
+MlHc9DKWxuHd6CWWJ91dM8Himp1pnkUzfEdQfIgtS1EMor770dvXpBqGptGUhyis
+DpnNP6O39zFqb6kqWActILx5jmO1YcKXAgbBYLU9gezyrPyGdDX/KkViG24+gYq1
+zzMKrh+Lpifp0TttEubWv/we1v98NQFG2PuISA06svQ53bjZp/2k/XUqxCXNxkb+
+aZv6Fw1dgG306Ew45CB+55+zRR6VOQksyBQof40QCfnNhQuqlY9p026rN3yBCqIM
+cIHiZcVWknFcowEl+OKZ701qAwXghwTi1pLEC/prXVsGKUBsICClBbgCzfT44ntt
+XSoXsZjAlDBhQHwOQaC5dpAfq6cx8keqChWY2qrDhWRflxCL0B09R2g0Uy9sKq7p
+8rdMpV4bqH79tbQ7qwWWANPLoQwf8xAIa39/77mvjW9uouk3Qqts8XuGWGDxF7XO
+V12NNDy0Eu2VEhR5zsP4MsjwMxyAvTKRS2riyZZgI/0Ix6y1drqQhgAiemWhhiOP
+iYzOXtmle01geqzeJXUQDlSE3u5kD69w71JRm6n+K3QJerpEiA5Lqyyn1xvv/cRb
+8Y2NSrYetl+gqIohScjXOiYO+2YbeRivOfABOmRXz1zDelIuMgA=
+=vS6O
+-----END PGP SIGNATURE-----
+```
diff --git a/apps/site/pages/en/learn/asynchronous-work/asynchronous-flow-control.md b/apps/site/pages/en/learn/asynchronous-work/asynchronous-flow-control.md
index f08ae8cc82fdb..8b83359e19271 100644
--- a/apps/site/pages/en/learn/asynchronous-work/asynchronous-flow-control.md
+++ b/apps/site/pages/en/learn/asynchronous-work/asynchronous-flow-control.md
@@ -227,7 +227,7 @@ recipients.forEach(function (recipient) {
 });
 ```
 
-3. **Limited parallel:** parallel with limit, such as successfully emailing 1,000,000 recipients from a list of 10E7 users.
+3. **Limited parallel:** parallel with limit, such as successfully emailing 1,000,000 recipients from a list of 10 million users.
 
 ```js
 let successCount = 0;
diff --git a/apps/site/pages/en/learn/command-line/how-to-use-the-nodejs-repl.md b/apps/site/pages/en/learn/command-line/how-to-use-the-nodejs-repl.md
index ba1c36a9f33a9..99c84bf0260c6 100644
--- a/apps/site/pages/en/learn/command-line/how-to-use-the-nodejs-repl.md
+++ b/apps/site/pages/en/learn/command-line/how-to-use-the-nodejs-repl.md
@@ -53,7 +53,7 @@ false
 >
 ```
 
-Note the difference in the outputs of the above two lines. The Node REPL printed `undefined` after executed `console.log()`, while on the other hand, it just printed the result of `5 === '5'`. You need to keep in mind that the former is just a statement in JavaScript, and the latter is an expression.
+Note the difference in the outputs of the above two lines. The Node REPL printed `undefined` after executing `console.log()`, while on the other hand, it just printed the result of `5 === '5'`. You need to keep in mind that the former is just a statement in JavaScript, and the latter is an expression.
 
 In some cases, the code you want to test might need multiple lines. For example, say you want to define a function that generates a random number, in the REPL session type in the following line and press enter:
 
diff --git a/apps/site/pages/en/learn/getting-started/nodejs-the-difference-between-development-and-production.md b/apps/site/pages/en/learn/getting-started/nodejs-the-difference-between-development-and-production.md
index 86ccdf80ab3bf..2d815be587a9a 100644
--- a/apps/site/pages/en/learn/getting-started/nodejs-the-difference-between-development-and-production.md
+++ b/apps/site/pages/en/learn/getting-started/nodejs-the-difference-between-development-and-production.md
@@ -1,15 +1,23 @@
 ---
 title: Node.js, the difference between development and production
 layout: learn
-authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, RenanTKN
+authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, RenanTKN, mcollina
 ---
 
 # Node.js, the difference between development and production
 
-You can have different configurations for production and development environments.
+**There is no difference between development and production in Node.js**, i.e., there are no specific settings you need to apply to make Node.js work in a production configuration.
+However, a few libraries in the npm registry recognize using the `NODE_ENV` variable and default it to a `development` setting.
+Always run your Node.js with the `NODE_ENV=production` set.
 
-Node.js assumes it's always running in a development environment.
-You can signal Node.js that you are running in production by setting the `NODE_ENV=production` environment variable.
+A popular way of configuring your application is by using the [twelve factor methodology](https://12factor.net/).
+
+## NODE_ENV in Express
+
+In the wildly popular [express](https://expressjs.com/) framework, setting the `NODE_ENV` to `production` generally ensures that:
+
+- logging is kept to a minimum, essential level
+- more caching levels take place to optimize performance
 
 This is usually done by executing the command
 
@@ -25,16 +33,32 @@ You can also apply the environment variable by prepending it to your application
 NODE_ENV=production node app.js
 ```
 
-This environment variable is a convention that is widely used in external libraries as well.
+For example, in an Express app, you can use this to set different error handlers per environment:
 
-Setting the environment to `production` generally ensures that
+```js
+if (process.env.NODE_ENV === 'development') {
+  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
+}
 
-- logging is kept to a minimum, essential level
-- more caching levels take place to optimize performance
+if (process.env.NODE_ENV === 'production') {
+  app.use(express.errorHandler());
+}
+```
 
 For example [Pug](https://pugjs.org), the templating library used by [Express](https://expressjs.com), compiles in debug mode if `NODE_ENV` is not set to `production`. Express views are compiled in every request in development mode, while in production they are cached. There are many more examples.
 
-You can use conditional statements to execute code in different environments:
+**This environment variable is a convention widely used in external libraries, but not within Node.js itself**.
+
+## Why is NODE_ENV considered an antipattern?
+
+An environment is a digital platform or a system where engineers can build, test, _deploy_, and manage software products. Conventionally, there are four stages or types of environments where our application is run:
+
+- Development
+- Testing
+- Staging
+- Production
+
+The fundamental problem of `NODE_ENV` stems from developers combining optimizations and software behavior with the environment their software is running on. The result is code like the following:
 
 ```js
 if (process.env.NODE_ENV === 'development') {
@@ -50,14 +74,5 @@ if (['production', 'staging'].includes(process.env.NODE_ENV)) {
 }
 ```
 
-For example, in an Express app, you can use this to set different error handlers per environment:
-
-```js
-if (process.env.NODE_ENV === 'development') {
-  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
-}
-
-if (process.env.NODE_ENV === 'production') {
-  app.use(express.errorHandler());
-}
-```
+While this might look harmless, it makes the production and staging environments different, thus making reliable testing impossible. For example a test and thus a functionality of your product could pass when `NODE_ENV` is set to `development` but fail when setting `NODE_ENV` to `production`.
+Therefore, setting `NODE_ENV` to anything but `production` is considered an _antipattern_.
diff --git a/apps/site/pages/fr/download/prebuilt-binaries/index.mdx b/apps/site/pages/fr/download/prebuilt-binaries/index.mdx
index 8bb21316ba7a3..f6593de1d83be 100644
--- a/apps/site/pages/fr/download/prebuilt-binaries/index.mdx
+++ b/apps/site/pages/fr/download/prebuilt-binaries/index.mdx
@@ -13,12 +13,12 @@ Je veux la version  de Node.js pour 
 Node.js inclut .
 
-Lire le journal des modifications pour cette version
+Lire le journal des modifications pour cette version.
 
-Lire l'article de blog pour cette version
+Lire l'article de blog pour cette version.
 
-Apprenez à vérifier les SHASUMS signés
+Apprenez à vérifier les SHASUMS signés.
 
-Consultez les binaires préconstruits Nightly ou les Unofficial Builds pour d'autres plateformes.
+Consultez les binaires préconstruits Nightly, tous les binaires préconstruits Release ou Builds Non Officiels pour les autres plateformes.
 
 
diff --git a/apps/site/pages/id/about/governance.md b/apps/site/pages/id/about/governance.md
index d7e5643eb0b0b..1dc32b53357f0 100644
--- a/apps/site/pages/id/about/governance.md
+++ b/apps/site/pages/id/about/governance.md
@@ -7,11 +7,11 @@ layout: about
 
 ## Proses Pencarian Kesepakatan
 
-Proyek Node.js mengikuti model pengambilan keputusan [Pencarian Konsensus][].
+Proyek Node.js mengikuti model pengambilan keputusan \[Pencarian Konsensus] \[].
 
 ## Kolaborator
 
-Repositori inti GitHub [nodejs/node][] dikelola oleh Kolaborator
+Repositori inti GitHub [nodejs/node] \[] dikelola oleh Kolaborator
 yang dinominasikan oleh Kolaborator lain yang ada secara berkelanjutan.
 
 Individu yang memberikan kontribusi signifikan dan berharga akan dijadikan Kolaborator dan diberikan akses komitmen terhadap proyek. Individu-individu ini diidentifikasi oleh Kolaborator lain dan nominasi mereka didiskusikan dengan Kolaborator yang ada.
@@ -22,11 +22,11 @@ Panduan untuk Kolaborator disimpan di [collaborator-guide.md][].
 
 ## Komite Pengarah Teknis
 
-Proyek ini diatur oleh [Komite Pengarah Teknis][] dalam bahasa inggris Technical Steering Committee (TSC) yang bertanggung jawab atas panduan tingkat tinggi proyek. TSC adalah bagian dari Kolaborator aktif yang dinominasikan oleh anggota TSC lain yang sudah ada.
+Proyek ini diatur oleh \[Komite Pengarah Teknis]\[] dalam bahasa inggris Technical Steering Committee (TSC) yang bertanggung jawab atas panduan tingkat tinggi proyek. TSC adalah bagian dari Kolaborator aktif yang dinominasikan oleh anggota TSC lain yang sudah ada.
 
-[pencarian konsensus]: https://id.wikipedia.org/wiki/Musyawarah
+[consensus seeking]: https://id.wikipedia.org/wiki/Musyawarah
 [readme.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members
 [tsc]: https://github.com/nodejs/TSC
-[komite pengarah teknis]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
+[technical steering committee (tsc)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md
 [collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md
 [nodejs/node]: https://github.com/nodejs/node
diff --git a/apps/site/pages/id/about/index.mdx b/apps/site/pages/id/about/index.mdx
index b420da357524f..bb2d0e29b91ee 100644
--- a/apps/site/pages/id/about/index.mdx
+++ b/apps/site/pages/id/about/index.mdx
@@ -56,7 +56,7 @@ Jika ada yang belum familiar dengan bahasa ini, ada artikel lengkap tentang [Blo
 
 ---
 
-Node.js memiliki desain yang mirip dengan, dan dipengaruhi oleh, sistem seperti [Event Machine][] Ruby dan [Twisted][] Python. Node.js membawa model acara sedikit lebih jauh. Ini menyajikan loop peristiwa sebagai konstruksi runtime, bukan sebagai perpustakaan. Di sistem lain, selalu ada panggilan pemblokiran untuk memulai perulangan peristiwa. Biasanya, perilaku ditentukan melalui callback di awal skrip, dan di akhir skrip, server dimulai melalui panggilan pemblokiran seperti `EventMachine::run()`. Di Node.js, tidak ada panggilan start-the-event-loop. Node.js cukup memasuki loop acara setelah menjalankan skrip input. Node.js keluar dari loop peristiwa ketika tidak ada lagi callback yang harus dilakukan. Perilaku ini seperti JavaScript browser — loop peristiwa disembunyikan dari pengguna.
+Node.js memiliki desain yang mirip dengan, dan dipengaruhi oleh, sistem seperti [Event Machine] \[] Ruby dan \[Twisted] \[] Python. Node.js membawa model acara sedikit lebih jauh. Ini menyajikan loop peristiwa sebagai konstruksi runtime, bukan sebagai perpustakaan. Di sistem lain, selalu ada panggilan pemblokiran untuk memulai perulangan peristiwa. Biasanya, perilaku ditentukan melalui callback di awal skrip, dan di akhir skrip, server dimulai melalui panggilan pemblokiran seperti `EventMachine::run()`. Di Node.js, tidak ada panggilan start-the-event-loop. Node.js cukup memasuki loop acara setelah menjalankan skrip input. Node.js keluar dari loop peristiwa ketika tidak ada lagi callback yang harus dilakukan. Perilaku ini seperti JavaScript browser — loop peristiwa disembunyikan dari pengguna.
 
 HTTP adalah warga negara kelas satu di Node.js, dirancang dengan streaming dan rendah
 latensi dalam pikiran. Ini membuat Node.js sangat cocok untuk fondasi web
@@ -68,4 +68,4 @@ Node.js dirancang tanpa thread bukan berarti Anda tidak dapat memanfaatkan banya
 [`child_process.fork()`]: https://nodejs.org/api/child_process.html
 [`cluster`]: https://nodejs.org/api/cluster.html
 [event machine]: https://github.com/eventmachine/eventmachine
-[twisted]: https://twisted.org/
+[berpilin]: https://twisted.org/
diff --git a/apps/site/pages/id/download/prebuilt-binaries/index.mdx b/apps/site/pages/id/download/prebuilt-binaries/index.mdx
index 108e566022a22..84edff3032a19 100644
--- a/apps/site/pages/id/download/prebuilt-binaries/index.mdx
+++ b/apps/site/pages/id/download/prebuilt-binaries/index.mdx
@@ -13,12 +13,12 @@ Saya ingin versi Node.js  untuk 
 Node.js disertakan .
 
-Baca log perubahan untuk versi ini
+Baca log perubahan untuk versi ini.
 
-Baca pos artikel untuk versi ini
+Baca pos artikel untuk versi ini.
 
-Pelajari cara memverifikasi SHASUMS yang ditandatangani
+Pelajari cara memverifikasi SHASUMS yang ditandatangani.
 
-Lihat biner pra-dibangun secara Nightly atau Bangunan Tidak Resmi untuk platform lain
+Lihat biner pra-dibangun secara Nightly, semua biner pra-dibangun Rilis, atau Bangunan Tidak Resmi untuk platform lain.
 
 
diff --git a/apps/site/pages/ja/about/index.mdx b/apps/site/pages/ja/about/index.mdx
new file mode 100644
index 0000000000000..00c987a077ad0
--- /dev/null
+++ b/apps/site/pages/ja/about/index.mdx
@@ -0,0 +1,60 @@
+---
+title: Node.js®とは
+layout: about
+---
+
+Node.js®とは
+
+非同期イベント駆動型のJavaScript実行環境であるNode.jsはスケーラブルなネットワークアプリケーションを構築するために設計されています。次の「hello world」の例では、多数のネットワーク接続を同時に処理できます。各ネットワーク接続時にコールバックが起動されますが、実行する処理がない場合、Node.jsはスリープします。
+
+```cjs
+const { createServer } = require('node:http');
+
+const hostname = '127.0.0.1';
+const port = 3000;
+
+const server = createServer((req, res) => {
+  res.statusCode = 200;
+  res.setHeader('Content-Type', 'text/plain');
+  res.end('Hello World');
+});
+
+server.listen(port, hostname, () => {
+  console.log(`Server running at http://${hostname}:${port}/`);
+});
+```
+
+```mjs
+import { createServer } from 'node:http';
+
+const hostname = '127.0.0.1';
+const port = 3000;
+
+const server = createServer((req, res) => {
+  res.statusCode = 200;
+  res.setHeader('Content-Type', 'text/plain');
+  res.end('Hello World');
+});
+
+server.listen(port, hostname, () => {
+  console.log(`Server running at http://${hostname}:${port}/`);
+});
+```
+
+これはOSのスレッドを使用する一般的な同時実行モデルとは対照的です。スレッドベースのネットワーク処理は比較的効率が悪く、使いこなすのが非常に難しくなります。さらにNode.jsではロックがないため、プロセスのデッドロックの心配から解放されます。Node.jsにはI/Oを直接実行する関数がほとんどないため、Node.js標準ライブラリーの同期メソッドを使用してI/Oが実行される場合を除いてプロセスがブロックされることはありません。何もブロックしないNode.jsでスケーラブルなシステムを開発するのは非常に合理的です。
+
+もしこの説明が聞き慣れない場合は [Blocking vs. Non-Blocking][] を確認してみてください。
+
+---
+
+Node.jsはRubyの [Event Machine][] やPythonの [Twisted][] に影響を受けており、似たシステム設計になっています。Node.jsはイベントモデルをもう少し深掘りしています。Node.jsはイベントループをライブラリーとしてではなく実行環境の構成要素として提供します。他のシステムではイベントループを開始するために常にブロック処理の呼び出しがあります。一般的にはスクリプトの最初にコールバックによって振る舞いが定義され、最後に `EventMachine::run()` のようなブロック処理の呼び出しによってサーバーが起動されます。Node.jsにはこのようなイベントループの開始時の呼び出しがありません。Node.jsは入力されたスクリプトを実行したあと、単にイベントループに入ります。Node.jsは実行するコールバックがなくなるとイベントループを終了します。この動作はブラウザー上のJavaScriptと同じでイベントループはユーザーから隠されています。
+
+HTTPはNode.jsの中では第一級オブジェクトであり、ストリーミングや低レイテンシーを意識して設計されています。このためNode.jsはウェブのライブラリーやフレームワークの基盤として適しています。
+
+Node.jsはスレッドを用いず設計されていますが、マルチコアを利用できないわけではありません。子プロセスは [`child_process.fork()`][] APIを使って作成でき、簡単に通信できるように設計されています。これと同じインターフェイスをもとに作られたのが [`cluster`][] モジュールで、プロセス間でソケットを共有することでコアの負荷分散を行えます。
+
+[blocking vs. non-blocking]: /learn/asynchronous-work/overview-of-blocking-vs-non-blocking
+[`child_process.fork()`]: https://nodejs.org/api/child_process.html
+[`cluster`]: https://nodejs.org/api/cluster.html
+[event machine]: https://github.com/eventmachine/eventmachine
+[twisted]: https://twisted.org/
diff --git a/apps/site/pages/ja/about/previous-releases.mdx b/apps/site/pages/ja/about/previous-releases.mdx
new file mode 100644
index 0000000000000..251c19f344f41
--- /dev/null
+++ b/apps/site/pages/ja/about/previous-releases.mdx
@@ -0,0 +1,18 @@
+---
+title: Node.js リリース
+layout: about
+---
+
+Node.js リリース
+
+Node.jsのメジャーバージョンは6か月間\_Current\_ステータスとなり、ライブラリー開発者にサポートを追加する時間を与えます。6か月後、奇数番号のバージョン(9、11など)はサポートが終了し、偶数番号のバージョン(10、12など)が\_Active LTS\_ステータスに移行し、一般公開向けの準備が整います。\_LTS\_ステータスとは「長期間サポート」であり、通常は合計30か月間の重要なバグ修正が保証されます。プロダクションのアプリケーションでは\_Active LTS\_または\_Maintenance LTS\_ステータスのバージョンのみを利用してください。
+
+## リリーススケジュール
+
+![Releases](https://raw.githubusercontent.com/nodejs/Release/main/schedule.svg?sanitize=true)
+
+Node.jsのリリーススケジュールに関する詳しい情報は[GitHub](https://github.com/nodejs/release#release-schedule)で確認できます。
+
+## 各バージョンの最新のリリース
+
+
diff --git a/apps/site/pages/ja/download/prebuilt-binaries/index.mdx b/apps/site/pages/ja/download/prebuilt-binaries/index.mdx
index 5219eba628248..c5dd9fc686009 100644
--- a/apps/site/pages/ja/download/prebuilt-binaries/index.mdx
+++ b/apps/site/pages/ja/download/prebuilt-binaries/index.mdx
@@ -13,16 +13,11 @@ subtitle: 好きな方法でNode.jsをダウンロードできます。
 
Node.jsはを同梱しています。 -このバージョン -の変更点を確認する。 +このバージョンの変更点を確認できます。 -このバージョン -に関するブログ記事を確認する。 +このバージョンに関するブログ記事も合わせて確認してください。 - - 署名済みSHASUMSの検証方法 - -を確認する。 +署名済みSHASUMSの検証方法を確認してください。 -ナイトリービルドや他のプラットフォーム用の非公式のビルドがあります。 +ナイトリー版リリース版のビルド済みバイナリ、その他のプラットフォーム用の非公式版のビルドもあります。
diff --git a/apps/site/pages/ja/download/prebuilt-installer/current.mdx b/apps/site/pages/ja/download/prebuilt-installer/current.mdx new file mode 100644 index 0000000000000..800de822c8fb2 --- /dev/null +++ b/apps/site/pages/ja/download/prebuilt-installer/current.mdx @@ -0,0 +1,30 @@ +--- +layout: download +title: Node.js®をダウンロードする +subtitle: 好きな方法でNode.jsをダウンロードできます。 +--- + +
+で動作している用のNode.js をダウンロードする。 + + +
+ +
+Node.jsはを同梱しています。 + +このバージョン +の変更点を確認する。 + +このバージョン +に関するブログ記事を確認する。 + + + 署名済みSHASUMSの検証方法 + +を確認する。 + +すべてのダウンロードオプションを確認する。 + +Node.jsのリリースについて学ぶ +
diff --git a/apps/site/pages/ja/download/prebuilt-installer/index.mdx b/apps/site/pages/ja/download/prebuilt-installer/index.mdx new file mode 100644 index 0000000000000..800de822c8fb2 --- /dev/null +++ b/apps/site/pages/ja/download/prebuilt-installer/index.mdx @@ -0,0 +1,30 @@ +--- +layout: download +title: Node.js®をダウンロードする +subtitle: 好きな方法でNode.jsをダウンロードできます。 +--- + +
+で動作している用のNode.js をダウンロードする。 + + +
+ +
+Node.jsはを同梱しています。 + +このバージョン +の変更点を確認する。 + +このバージョン +に関するブログ記事を確認する。 + + + 署名済みSHASUMSの検証方法 + +を確認する。 + +すべてのダウンロードオプションを確認する。 + +Node.jsのリリースについて学ぶ +
diff --git a/apps/site/pages/ko/download/source-code/index.mdx b/apps/site/pages/ko/download/source-code/index.mdx new file mode 100644 index 0000000000000..b43f6026650ba --- /dev/null +++ b/apps/site/pages/ko/download/source-code/index.mdx @@ -0,0 +1,26 @@ +--- +layout: download +title: Node.js® 다운로드 +subtitle: 원하는 방법으로 Node.js를 다운로드 하세요. +--- + +
+원하는 버전 의 Node.js 소스 코드 + + +
+ +
+Node.js에는 이 포함되어 있습니다. + +변경된 사항은 다음을 참고하세요. 이 버전 + +이 버전에 대한 블로그 포스트를 +확인합니다. + +SHA 서명 확인라는 +방법을 배워보세요. + +코드에서 Node.js를 빌드하는 법을 확인해보세요. + +
diff --git a/apps/site/pages/ko/index.mdx b/apps/site/pages/ko/index.mdx new file mode 100644 index 0000000000000..7fb3d0a27bbed --- /dev/null +++ b/apps/site/pages/ko/index.mdx @@ -0,0 +1,137 @@ +--- +title: 어디서든 JavaScript를 실행하세요!! +layout: home +--- + +
+ + +
+

어디서든 JavaScript를 실행하세요!!

+ +Node.js®는 무료, 오픈소스, 크로스플랫폼 JavaSript 런타임 환경으로 개발자 여러분이 서버, 웹 앱, 커맨드 작성 도구와 스크립트를 만들도록 해줍니다. + +
+ +
+ + {({ release }) => ( + <> + Node.js 다운로드 (LTS) + + Node.js 다운로드 {release.versionWithPrefix} + 1 LTS. + Node.js는 package managers를 통해서도 다운로드 할 수 있습니다.. + + + )} + + + + {({ release }) => ( + + 새로운 기능을 먼저 경험하고 싶다면 + Node.js {release.versionWithPrefix} + 1 를 다운 받으세요. + + )} + +
+
+ +
+
+ ```js displayName="Create an HTTP Server" + // server.mjs + import { createServer } from 'node:http'; + +const server = createServer((req, res) => { +res.writeHead(200, { 'Content-Type': 'text/plain' }); +res.end('Hello World!\n'); +}); + +// starts a simple http server locally on port 3000 +server.listen(3000, '127.0.0.1', () => { +console.log('Listening on 127.0.0.1:3000'); +}); + +// run with `node server.mjs` + +```` + +```js displayName="Write Tests" +// tests.mjs +import assert from 'node:assert'; +import test from 'node:test'; + +test('that 1 is equal 1', () => { + assert.strictEqual(1, 1); +}); + +test('that throws as 1 is not equal 2', () => { + // throws an exception because 1 != 2 + assert.strictEqual(1, 2); +}); + +// run with `node tests.mjs` +```` + +```js displayName="Read and Hash a File" +// crypto.mjs +import { createHash } from 'node:crypto'; +import { readFile } from 'node:fs/promises'; + +const hasher = createHash('sha1'); + +hasher.setEncoding('hex'); +// ensure you have a `package.json` file for this test! +hasher.write(await readFile('package.json')); +hasher.end(); + +const fileHash = hasher.read(); + +// run with `node crypto.mjs` +``` + +```js displayName="Streams Pipeline" +// streams.mjs +import { pipeline } from 'node:stream/promises'; +import { createReadStream, createWriteStream } from 'node:fs'; +import { createGzip } from 'node:zlib'; + +// ensure you have a `package.json` file for this test! +await pipeline( + createReadStream('package.json'), + createGzip(), + createWriteStream('package.json.gz') +); + +// run with `node streams.mjs` +``` + +```js displayName="Work with Threads" +// threads.mjs +import { + Worker, + isMainThread, + workerData, + parentPort, +} from 'node:worker_threads'; + +if (isMainThread) { + const data = 'some data'; + const worker = new Worker(import.meta.filename, { workerData: data }); + worker.on('message', msg => console.log('Reply from Thread:', msg)); +} else { + const source = workerData; + parentPort.postMessage(btoa(source.toUpperCase())); +} + +// run with `node threads.mjs` +``` + +
+ +Node.js에 대해 더 알고 싶다면 학습 자료를 확인하세요[Learning materials](/learn). + +
diff --git a/apps/site/pages/ko/search.mdx b/apps/site/pages/ko/search.mdx new file mode 100644 index 0000000000000..e9eaeb4f3fb9e --- /dev/null +++ b/apps/site/pages/ko/search.mdx @@ -0,0 +1,6 @@ +--- +layout: search +title: 검색결과 +--- + + diff --git a/apps/site/pages/uk/about/get-involved/collab-summit.md b/apps/site/pages/uk/about/get-involved/collab-summit.md index 716d001e69b74..33c14ed1e8f2a 100644 --- a/apps/site/pages/uk/about/get-involved/collab-summit.md +++ b/apps/site/pages/uk/about/get-involved/collab-summit.md @@ -1,18 +1,18 @@ --- -title: Саміт співавторів +title: Саміт співпраці layout: about --- -# Саміт співавторів +# Саміт співпраці -Саміт співавторства/Collaboration Summit Node.js ― це "неконференція", на яку збираються поточні та потенційні співавтори, щоб наживо обговорити Node.js та поділитися знаннями. Команди, робочі групи та співавтори зі спільноти збираються двічі на рік для прийняття важливих рішень, водночас маючи змогу попрацювати над ідеями, які вони хочуть просувати особисто. +Саміт співпраці (Collaboration Summit) Node.js ― це «неконференція», на яку збираються поточні та потенційні учасники, щоб наживо обговорювати Node.js та ділитися знаннями. Команди, робочі групи та учасники зі спільноти збираються двічі на рік для прийняття важливих рішень, водночас маючи змогу попрацювати над ідеями, які вони хочуть просувати особисто. ## Хто запрошений? -Участь у Саміті співавторства в основному беруть існуючі учасники та члени спільноти, але він також вітає тих, хто також бажає стати співавтором. Якщо ви новачок у внесенні змін до Node.js, Саміт співавторства може бути гарною можливістю допомогти вам дізнатися, що відбувається в межах спільноти, і зробити внесок вже з тими навичками, які ви хочете покращити. +Участь у Саміті співпраці в основному беруть чинні учасники та члени спільноти, але також запрошені всі, хто ще не є учасником та хоче стати ним. Якщо ви лише починаєте робити внески в Node.js, Саміт співпраці може стати чудовою можливістю дізнатися, що відбувається в спільноті, та відточувати свої навички. -Перед самітом співавтори та учасники спільноти надсилають пропозиції щодо створення розкладу подій. Присутні можуть попередньо ознайомитись з подією та в загальному обговорити її з іншими співавторами, перед тим як відвідати. Також буде багато можливостей для нетворкінгу та брейнштормів. +Перед самітом учасники та члени спільноти надсилають пропозиції щодо сесії для створення розкладу. Відвідувачі можуть ознайомитись із сесією перед її початком, обговоривши загальні питання зі співавторами. Також буде багато можливостей для кулуарних обговорень та мозкових штурмів. -Ми будемо раді бачити вас на Саміті Співатворів/Collab Summit! Перегляньте [репозиторій саміту](https://github.com/nodejs/summit) -для майбутніх і минулих подій і ознайомтесь із -[відкритими питаннями](https://github.com/nodejs/summit/issues), щоб розуміти, які проблеми співавтори та учасники спільноти хочуть обговорити наживо. +Щоб дізнатися більше про майбутні й минулі саміти співпраці, перейдіть на +[репозиторій самітів](https://github.com/openjs-foundation/summit). Ознайомтесь із +[обговореннями](https://github.com/nodejs/summit/issues), у яких учасники та члени спільноти пропонують теми для обговорення наживо. diff --git a/apps/site/pages/uk/about/get-involved/contribute.md b/apps/site/pages/uk/about/get-involved/contribute.md index 781e1119f739a..21bda3e1c870b 100644 --- a/apps/site/pages/uk/about/get-involved/contribute.md +++ b/apps/site/pages/uk/about/get-involved/contribute.md @@ -1,47 +1,47 @@ --- -title: Долучитись до проєкту +title: Внесок у проєкт layout: about --- -# Долучитись до проєкту +# Внесок у проєкт -Ми вдячні за бажання долучитись до Node.js. Існує багато способів та місць де ви можете зробити свій вклад у проєкт, і ми тут, щоб допомогти вам з цим. +Ми вдячні за вашу зацікавленість в участі в Node.js! Існує багато способів і місць, де ви можете робити внески, а ми вам цьому сприятимемо. -## Запит на загальну допомогу +## Запит про загальну допомогу -Через високий рівень активності у репозиторії "nodejs/node\\`, питання або запити про допомогу щодо використання Node.js слід створювати в репозиторії [допомога по Node.js](https://github.com/nodejs/help/issues). +Через високий рівень активності в репозиторії `nodejs/node\` питання та запити про загальну допомогу щодо використання Node.js слід створювати в [репозиторії допомоги з Node.js](https://github.com/nodejs/help/issues). -## Повідомити про проблему +## Повідомлення про проблему -Якщо ви виявили те, що, на вашу думку, є проблемою з Node.js, не вагайтесь повідомити про проблему в GitHub. Заповнюючи інформацію про проблему, будь ласка, переконайтеся, що ви можете викласти суть з можливістю відтворити проблему у формі тесту, який не містить жодних зовнішніх залежностей. Тобто тестовий приклад можна виконати без нічого, окрім самого Node.js. +Якщо ви виявили те, що, на вашу думку, є проблемою в Node.js, не вагайтеся повідомити про неї в GitHub. Заповнюючи інформацію про проблему, будь ласка, переконайтеся, що ви можете викласти її суть з можливістю відтворення у формі тесту, який не містить жодних зовнішніх залежностей. Це означає, що цей тест можна виконати без нічого, крім самого Node.js. -Повідомляючи про проблему нам також потрібно якомога більше інформації, яку ви зможете надати, про середовище в якому вона виникла. Ми не знаємо, яка інформація буде доречною, намагаючись визначити проблему, тому вкажіть, щонайменше, наступне: +Коли ви повідомляєте про проблему, указуйте якомога більше інформації про своє середовище. Вона може бути доречною, коли ми визначатимемо джерело проблеми. Будь ласка, указуйте принаймні наступну інформацію: -- Версія Node.js -- Платформа, на якій ви працюєте (macOS, SmartOS, Linux, Windows) -- Архітектура, на якій ви працюєте (32bit або 64bit та x86 або ARM) +- версію Node.js +- платформу, на якій ви працюєте (macOS, SmartOS, Linux, Windows) +- архітектуру, на якій ви працюєте (32-бітна чи 64-бітна, x86 чи ARM) -Проєкт Node.js наразі керується через кілька окремих репозиторіїв GitHub, кожен з власним списком проблем/запитів. Якщо це можливо, будь ласка, спрямовуйте будь-які проблеми до відповідного репозиторію, але не хвилюйтеся, якщо вони потраплять не в те місце – спільнота співавторів буде рада скерувати вас у правильному напрямку. +Проєкт Node.js наразі керується багатьма окремими репозиторіями GitHub, кожний із власним списком проблем та запитів. Якщо це можливо, будь ласка, спрямовуйте всі проблеми та запити до відповідного репозиторію, але не хвилюйтеся, якщо вони потраплять не туди: спільнота учасників буде рада скерувати вас у правильному напрямку. -- Щоб повідомити про характерні Node.js проблеми, скористайтесь [nodejs/node](https://github.com/nodejs/node) -- Щоб повідомити про проблеми із цим сайтом, скористайтесь [nodejs/nodejs.org](https://github.com/nodejs/nodejs.org/issues) +- Щоб повідомити про проблеми саме в Node.js, скористайтеся [nodejs/node](https://github.com/nodejs/node) +- Щоб повідомити про проблеми в цьому сайті, скористайтеся [nodejs/nodejs.org](https://github.com/nodejs/nodejs.org/issues) -## Внести зміни в код +## Внесок у код -Якщо ви хочете виправити помилки або додати нову функціональність до проєкту, будь ласка, ознайомтесь із [інструкцією як внести зміни до Node.js](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md/#pull-requests). Там також пояснюється процес перегляду співавторами всіх змін до проєкту. +Якщо ви хочете виправити помилки або додати нову функціональність до Node.js, будь ласка, ознайомтесь із [інструкцією щодо внесення змін у Node.js](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md/#pull-requests). Там також пояснюється процес перегляду учасниками всіх змін до проєкту. -Якщо вам цікаво, як почати, ви можете переглянути [список завдань Node](https://www.nodetodo.org/), який може зорієнтувати вас яким чином зробити свій перший вклад у проєкт. +Аби почати роботу, перегляньте [список завдань Node](https://www.nodetodo.org/), який допоможе вам здійснити свій перший внесок у проєкт. -## Стати співавтором +## Як стати співавтором? -Стаючи співавтором, користувачі можуть ще більше вплинути на проєкт. Вони можуть допомогти іншим співавторам, перевіряючи їх вклад у проєкт та сортуючи проблеми, а також брати ще більшу участь у формуванні майбутнього Node.js. Особи, яких TSC (Технічний Наглядовий Комітет) визначив такими - що зробили значний і цінний внесок до будь-якого репозиторію Node.js, можуть стати співавторами та отримати доступ до проєкту. Діяльність, яка береться до уваги, включає (та не обмежуюється) якістю: +Співавтори мають великий уплив на проєкт. Вони можуть допомагати учасникам, оцінюючи їхні внески, пріоритезувати проблеми та безпосередньо формувати майбутнє проєкту. Ті особи, які, згідно з TSC, роблять значний та цінний внесок у будь-якому репозиторії Node.js, можуть стати співавторами та отримати доступ для commit'ів. Дії, які враховуються як внески, включають (але не обмежуються ними) якісні: -- змін/commits та pull requests, що стосуються коду -- змін/commits та pull requests, що стосуються документації -- коментарів до проблем і pull requests -- зробленого внеску у сайт Node.js -- допомоги наданої кінцевим користувачам і новим співавторам -- участі у робочих групах -- участі у ширшій Node.js спільноті +- commit'и та pull request'и, що стосуються коду +- commit'и та pull request'и, що стосуються документації +- коментарі до issue та pull request'ів +- внески в сайт Node.js +- консультації для кінцевих користувачів та нових учасників +- участі в робочих групах +- участі в ширшій спільноті Node.js Якщо особи, що роблять цінний вклад у проєкт, вважають, що вони не розглядались на надання дозволу для внесення змін, тоді вони можуть [створити запит в репозиторії](https://github.com/nodejs/TSC/issues) або [сконтактувати із членом TSC](https://github.com/nodejs/node#tsc-technical-steering-committee) напряму. diff --git a/apps/site/pages/uk/about/get-involved/index.md b/apps/site/pages/uk/about/get-involved/index.md index 71e8c0fc64f0d..f5d772472c1c3 100644 --- a/apps/site/pages/uk/about/get-involved/index.md +++ b/apps/site/pages/uk/about/get-involved/index.md @@ -7,11 +7,11 @@ layout: about ## Обговорення спільноти -- [Список проблем на GitHub](https://github.com/nodejs/node/issues) місце для обговорення основної функціональності Node.js. -- Для спілкування про розробку на Node.js в реальному часі скористайтеся однією з наступних платформ - - Для багатокористувацьких конференцій відвідайте `irc.libera.chat` в `#node.js` каналі через [IRC клієнт](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) або під'єднайтесь до каналу через браузер використовуючи [вебзастосунок](https://kiwiirc.com/nextclient/) +- [Список проблем на GitHub](https://github.com/nodejs/node/issues) — це місце для обговорення основного функціонала Node.js. +- Для спілкування про розробку Node.js у реальному часі скористайтеся однією з наступних платформ: + - Для IRC перейдіть на `irc.libera.chat` у каналі `#node.js` через [клієнт IRC](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) або під'єднайтеся до каналу з веббраузера [через вебклієнт](https://kiwiirc.com/nextclient/) - Для Slack є два варіанти: - - [OpenJSF Slack](https://slack-invite.openjsf.org/) - запущений OpenJS Foundation спільнотою Slack з декількома Node.js каналами(канали з префіксом `#nodejs-` стосуються проєкту). + - [OpenJSF Slack](https://slack-invite.openjsf.org/) — Slack, запущений спільнотою OpenJS Foundation, із декількома каналами Node.js (канали з префіксом `#nodejs-` стосуються цього проєкту). - [Node Slackers](https://www.nodeslackers.com/) — це спільнота Slack із фокусом на Node.js. - Офіційний Twitter Node.js: [nodejs](https://twitter.com/nodejs). - [Календар проєкту Node.js](https://nodejs.org/calendar) з усіма публічними командними зустрічами. @@ -19,8 +19,8 @@ layout: about ## Навчання - [Офіційний розділ навчання](https://nodejs.org/en/learn/) вебсайту Node.js. -- [Офіційна документація по API](https://nodejs.org/api/). +- [Офіційна документація з API](https://nodejs.org/api/). - [NodeSchool.io](https://nodeschool.io/) навчить вас концепцій Node.js за допомогою інтерактивних ігор у командному рядку. -- [Stack Overflow Node.js tag](https://stackoverflow.com/questions/tagged/node.js) щодня збирає нову інформацію. -- [Тег Node.js на DEV Community](https://dev.to/t/node) — це місце, де можна ділитися проєктами, статтями та практичними заняттями з Node.js, а також почати обговорення та просити відгуки до тем, пов'язаних із Node.js. До участі запрошуються розробники всіх рівнів. +- [Тег Node.js у Stack Overflow](https://stackoverflow.com/questions/tagged/node.js) щодня збирає нову інформацію. +- [Тег Node.js на DEV Community](https://dev.to/t/node) — це місце, де можна ділитися проєктами, статтями та посібниками з Node.js, а також почати обговорення та просити відгуки до тем, пов'язаних із Node.js. До участі запрошуються розробники всіх рівнів. - [Nodeiflux](https://discordapp.com/invite/vUsrbjd) — це дружня спільнота бекенд-розробників Node.js, які підтримують один одного в Discord. diff --git a/apps/site/pages/uk/about/governance.md b/apps/site/pages/uk/about/governance.md index 45d23a97adaea..f9c7acfda8e99 100644 --- a/apps/site/pages/uk/about/governance.md +++ b/apps/site/pages/uk/about/governance.md @@ -7,23 +7,23 @@ layout: about ## Процес пошуку консенсусу -Node.js дотримується [Consensus Seeking][] моделі прийняття рішень. +Node.js дотримується моделі прийняття рішень \[знаходження консенсусу]\[]. ## Співавтори -Основний GitHub репозиторій [nodejs/node][] підтримується співавторами, які на постійній основі вибираються іншими, чинними, співавторами. +Основний репозиторій GitHub [nodejs/node][] обслуговується співавторами, які на постійній основі обираються іншими чинними співавторами. -Особи, які роблять важливий внесок стають співавторами та отримують дозвіл на внесення змін до проєкту. Ці особи визначаються іншими співавторами, а їх номінація на роль співавтора, обговорюється із чинними співавторами. +Особи, які здійснюють важливий та цінний внесок, стають співавторами та отримують доступ для commit'ів. Ці особи визначаються іншими співавторами, а їхня номінація на цю роль обговорюється із чинними співавторами. -Для ознайомлення із поточним списком співучасників, відвідайте [README.md][]. +Щоб дізнатися поточний список співавторів, перегляньте [README.md][]. -Інструкція для співавторів проєкту, підтримується на [collaborator-guide.md][]. +Інструкція для співавторів проєкту є на [collaborator-guide.md][]. ## Технічний керівний комітет -Проєкт керується \[Технічним наглядовим комітетом(TSC)]\[], який відповідальний за високорівневе керування проєктом. TSC - це набір активних співавторів, призначених іншими, чинними членами TSC. +Проєкт керується \\[Технічним керівним комітетом (TSC)]\\[], який відповідальний за високорівневе керування проєктом. TSC — це набір активних співавторів, які номінуються іншими чинними членами TSC. -[consensus seeking]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making +[consensus seeking]: https://uk.wikipedia.org/wiki/%D0%97%D0%BD%D0%B0%D1%85%D0%BE%D0%B4%D0%B6%D0%B5%D0%BD%D0%BD%D1%8F_%D0%BA%D0%BE%D0%BD%D1%81%D0%B5%D0%BD%D1%81%D1%83%D1%81%D1%83 [readme.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members [tsc]: https://github.com/nodejs/TSC [technical steering committee (tsc)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md diff --git a/apps/site/pages/uk/about/index.mdx b/apps/site/pages/uk/about/index.mdx new file mode 100644 index 0000000000000..8a4ba5503f812 --- /dev/null +++ b/apps/site/pages/uk/about/index.mdx @@ -0,0 +1,62 @@ +--- +title: Про Node.js® +layout: about +--- + +Про Node.js® + +Node.js, асинхронне подієве середовище виконання JavaScript, створене будувати масштабовані мережеві застосунки. Наступний приклад «Hello World» може обробляти багато з'єднань одночасно. Після кожного з'єднання виконується функція зворотного виклику, а якщо робота для виконання відсутня, Node.js буде очікувати. + +```cjs +const { createServer } = require('node:http'); + +const hostname = '127.0.0.1'; +const port = 3000; + +const server = createServer((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Hello World'); +}); + +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +}); +``` + +```mjs +import { createServer } from 'node:http'; + +const hostname = '127.0.0.1'; +const port = 3000; + +const server = createServer((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Hello World'); +}); + +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +}); +``` + +Ця модель використовується на противагу поширенішій моделі, у якій використовуються потоки ОС. Така модель відносно неефективна та важка у використанні. Крім того, користувачі Node.js можуть не хвилюватися про дедлоки, оскільки тут немає блокувань. Майже жодна функція не виконує ввід-вивід безпосередньо, тому процеси не блокуються, за винятком тих випадків, коли ввід-вивід виконується синхронними методами стандартної бібліотеки Node.js. Завдяки відсутності блокувань доцільно створювати масштабовані системи в Node.js. + +Якщо деякі терміни вам незрозумілі, перегляньте статтю про +[блокувальні та неблокувальні виклики][]. + +--- + +Node.js надихався системами [Event Machine][] мови Ruby та [Twisted][] мови Python. Проте Node.js зводить подієву модель на новий рівень. Він представляє цикл подій як основу середовища виконання, а не як бібліотеку. +інших системах присутній блокувальний виклик, який починає цикл подій. Зазвичай поведінка визначається функціями зворотного виклику на початку скрипту, після чого відбувається блокувальний виклик, наприклад, `EventMachine::run()`. Node.js не має такого виклику, а просто запускає цикл подій після виконання ввідного скрипту і виходить із циклу, коли всі зворотні виклики були виконані. Така поведінка схожа з поведінкою браузерного JavaScript — цикл подій прихований від користувача. + +HTTP є повноцінною частиною Node.js, розроблений з урахуванням потокової передачі даних і низької затримки. Це робить Node.js ідеальним варіантом для створення основи для веббібліотеки або фреймворку. + +Те, що Node.js спроєктований без використання потоків, не означає, що ви не можете використовувати багато ядер у своєму середовищі. Дочірні процеси можна створити за допомогою нашого API [`child_process.fork()`][]. Вони спроєктовані так, що з ними можна легко взаємодіяти. Модуль [`cluster`][] побудований на такому самому інтерфейсі, що дозволяє ділити сокети на багато процесів, аби збалансувати навантаження на ядра. + +[блокуючі vs неблокуючі методи]: /learn/asynchronous-work/overview-of-blocking-vs-non-blocking +[`child_process.fork()`]: https://nodejs.org/api/child_process.html +[`cluster`]: https://nodejs.org/api/cluster.html +[event machine]: https://github.com/eventmachine/eventmachine +[twisted]: https://twisted.org/ diff --git a/apps/site/pages/uk/about/security-reporting.mdx b/apps/site/pages/uk/about/security-reporting.mdx index 3ce5c1b0317de..37b8c91f920d7 100644 --- a/apps/site/pages/uk/about/security-reporting.mdx +++ b/apps/site/pages/uk/about/security-reporting.mdx @@ -9,45 +9,45 @@ layout: about ## Повідомлення про помилку в Node.js -Повідомляйте про безпекові проблеми в Node.js через [HackerOne](https://hackerone.com/nodejs). +Повідомляйте про проблеми безпеки в Node.js через [HackerOne](https://hackerone.com/nodejs). -Ваш лист буде розглянуто протягом 5 днів, а протягом 10 днів вам буде надіслано більш деталізовану відповідь з вказівками щодо подальшої обробки вашого запиту. +Ваше повідомлення розглянуть протягом 5 днів, а протягом 10 днів ви отримаєте детальну відповідь, яка міститиме подальші кроки щодо обробки повідомлення. -Після першої відповіді на ваше повідомлення, команда безпеки намагатиметься тримати вас у курсі стосовно прогресу у розв'язанні та оголошенні про проблему. Також, вас можуть попросити надати додаткову інформацію або інструкції стосовно повідомленої помилки. +Після першої відповіді на ваше повідомлення команда з безпеки намагатиметься тримати вас у курсі щодо прогресу в розв'язанні та оголошенні проблеми. У вас можуть попросити додаткову інформацію про повідомлену проблему чи надати рекомендації щодо неї. ### Програма винагород за знайдені помилки від Node.js -Node.js бере участь в офіційній програмі винагород за знайдені помилки для дослідників у сфері безпеки та заради відповідального публічного розкриття інформації. Програма керується через платформу HackerOne. Для детальнішої інформації відвідайте [HackerOne/nodejs](https://hackerone.com/nodejs). +Проєкт Node.js бере участь в офіційній програмі винагород за знайдені помилки для дослідників у галузі безпеки та відповідальних за оголошення інформації. Програма керується через платформу HackerOne. Перейдіть на [https://hackerone.com/nodejs](https://hackerone.com/nodejs), щоб дізнатися більше. ## Повідомлення про помилку в сторонніх модулях -Про помилки в безпеці сторонніх модулів слід повідомляти відповідним особам, які підтримують ці модулі. +Про помилки безпеки сторонніх модулів слід повідомляти їхніх супроводжувачів. ## Політика розкриття інформації -Ось політика розкриття безпекової інформації в Node.js +Ось політика розкриття інформації щодо безпеки в Node.js -Повідомлення про проблему отримане і призначене особі, яка його оброблятиме. Ця особа координуватиме процес виправлення та релізу. При підтверджені проблеми буде визначений список всіх версії у яких вона присутня. Код перевірятиметься на наявність потенційно подібних проблем. Виправлення підготують для всіх релізів, що досі підтримуються. Ці виправлення не будуть додані до загального репозиторію, а будуть зберігатись локально, до моменту офіційного оголошення про виправлення проблеми. +Основний обробник отримує повідомлення про помилку безпеки, яке йому призначається. Ця особа координуватиме процес виправлення помилки та релізу. Помилку знаходять та визначають усі версії, де вона присутня. Код перевіряють на наявність схожих помилок. Потім проводять виправлення для всіх обслуговуваних релізів. Ці виправлення не випускаються в публічний репозиторій, а зберігаються локально, поки не буде здійснено оголошення. -Обирається дата закриття цієї вразливості та робиться запит на CVE (Common Vulnerabilities and Exposures (CVE®)) щодо цієї вразливості. +Обирається дата оголошення цієї вразливості та робиться запит на CVE (Common Vulnerabilities and Exposures (CVE®)) щодо неї. -У день закриття, копія анонсу надсилається списку адресатів, що мають відношення до безпеки в Node.js. Зміни додаються до загального репозиторію і нові збірки розгортаються на nodejs.org. Протягом 6 годин після розсилки повідомлень, копію оголошення буде опубліковано у блозі Node.js. +У цю дату копію оголошення розсилають адресатам, які відповідають за безпеку Node.js. Зміни додаються до публічного репозиторію, а нові збірки — до nodejs.org. Протягом 6 годин після розсилки копію оголошення буде опубліковано в блозі Node.js. -Зазвичай дата закриття встановлюється протягом 72 годин від моменту видання CVE. Однак, це може залежати від серйозності та складності розв'язання проблеми. +Зазвичай датою оголошення є дата через 72 години після запиту на CVE. Однак вона може варіюватися залежно від серйозності помилки та складності її виправлення. -Цей процес може зайняти деякий час, особливо коли необхідна координація з командою підтримки інших проєктів. Всі зусилля будуть спрямовані на те, щоб розв'язати проблему якомога швидше, однак, важливо, щоб ми дотримувались вищезгаданого процесу релізу, щоб бути певними, що все відбувається належним чином. +Цей процес може зайняти певний час, особливо тоді, коли потрібна координація із супроводжувачами інших проєктів. Усі зусилля будуть спрямовані на обробку помилки якомога швидше, однак для нас важливо дотримуватися процесу вище, щоб оголошення відбулося належним чином. -## Отримання безпекових оновлень +## Отримання оновлень безпеки -Сповіщення, що стосуються безпеки, будуть поширюватись наступними методами. +Сповіщення, що стосуються безпеки, будуть поширюватися наступними методами: [Google Group](https://groups.google.com/group/nodejs-sec) -[Node.js Блог](/blog) +[Блог Node.js](/blog) ## Коментарі стосовно цієї політики Якщо у вас є пропозиції щодо покращення цього процесу, створіть [pull request](https://github.com/nodejs/nodejs.org) або -[додайте запит](https://github.com/nodejs/security-wg/issues/new) на обговорення. +[створіть issue](https://github.com/nodejs/security-wg/issues/new) для обговорення. ## Найкращі практики OpenSSF @@ -56,10 +56,10 @@ Node.js бере участь в офіційній програмі винаг style={{ display: 'inline-flex' }} > OpenSSF Badge -The Open Source Security Foundation (OpenSSF) [значок за застосування кращих практик](https://github.com/coreinfrastructure/best-practices-badge) це спосіб Free/Libre та Open Source Software (FLOSS) проєктів продемонструвати, що вони застосовують ці кращі практики. Проєкти можуть самостійно засвідчити, як вони дотримуються найкращих практик. Власники значка можуть швидко оцінити, які проєкти FLOSS дотримуються найкращих практик, і, як наслідок, з більшою ймовірністю створюватимуть якісніше і безпечніше програмне забезпечення. +[Значок за найкращі практики](https://github.com/coreinfrastructure/best-practices-badge) від Open Source Security Foundation (OpenSSF) — це спосіб для проєктів із відкритим кодом (Free/Libre and Open Source Software, FLOSS) показати, що вони дотримуються найкращих практик. Проєкти можуть самостійно описати, як вони дотримуються кожної практики. Користувачі можуть швидко оцінити, які проєкти FLOSS дотримуються найкращих практик і, як результат, створювати безпечне ПЗ кращої якості. diff --git a/apps/site/pages/uk/download/package-manager/all.md b/apps/site/pages/uk/download/package-manager/all.md new file mode 100644 index 0000000000000..6449151423d77 --- /dev/null +++ b/apps/site/pages/uk/download/package-manager/all.md @@ -0,0 +1,422 @@ +--- +layout: download +title: Установка Node.js через менеджер пакетів +--- + +# Установка Node.js через менеджери пакетів + +> Пакети на цій сторінці обслуговуються та підтримуються їхніми відповідними розробниками, **не** командою Node.js. Будь ласка, повідомляйте про проблеми цих пакетів їхнім розробникам. Якщо виявиться, що проблема є помилкою Node.js, то вони повідомлять нас про неї. + +--- + +- [Alpine Linux](#alpine-linux) +- [Android](#android) +- [Arch Linux](#arch-linux) +- [CentOS, Fedora та Red Hat Enterprise Linux](#centos-fedora-and-red-hat-enterprise-linux) +- [Дистрибутиви Linux на базі Debian та Ubuntu](#debian-and-ubuntu-based-linux-distributions) +- [Exherbo Linux](#exherbo-linux) +- [fnm](#fnm) +- [FreeBSD](#freebsd) +- [Gentoo](#gentoo) +- [IBM i](#ibm-i) +- [macOS](#macos) +- [n](#n) +- [NetBSD](#netbsd) +- [Nodenv](#nodenv) +- [nvm](#nvm) +- [nvs](#nvs) +- [OpenBSD](#openbsd) +- [openSUSE та SLE](#opensuse-and-sle) +- [SmartOS та illumos](#smartos-and-illumos) +- [Snap](#snap) +- [Solus](#solus) +- [vfox](#vfox) +- [Void Linux](#void-linux) +- [Windows](#windows-1) +- [z/OS](#zos) + +--- + +## Alpine Linux + +Node.js LTS та пакети npm доступні в головному репозиторії. + +```bash +apk add nodejs npm +``` + +Node.js Current можна встановити через репозиторій спільноти. + +```bash +apk add nodejs-current +``` + +## Android + +Підтримка Android досі є експериментальною в Node.js, тому попередньо скомпільовані бінарні файли ще не надаються розробниками Node.js. + +Однак, є сторонні рішення. Наприклад, спільнота [Termux](https://termux.com/) надає емулятор термінала та середовище Linux для Android, а також власний менеджер пакетів та [великий набір](https://github.com/termux/termux-packages) попередньо скомпільованих застосунків. Ця команда в застосунку Termux установить останню доступну версію Node.js: + +```bash +pkg install nodejs +``` + +Наразі бінарні файли Termux Node.js компонуються із `system-icu` (залежно від пакета `libicu`). + +## Arch Linux + +Node.js та пакети npm доступні в репозиторії спільноти. + +```bash +pacman -S nodejs npm +``` + +## CentOS, Fedora та Red Hat Enterprise Linux + +Node.js доступний як модуль із назвою `nodejs` у CentOS/RHEL 8 та Fedora. + +```bash +dnf module install nodejs: +``` + +де `` — основна версія Node.js. +Щоб побачити список доступних потоків: + +```bash +dnf module list nodejs +``` + +Наприклад, щоб установити Node.js 18: + +```bash +dnf module install nodejs:18/common +``` + +### Альтернативи + +Ці ресурси надають пакети, які сумісні з CentOS, Fedora та RHEL. + +- [Snaps Node.js](#snap) обслуговуються та підтримуються на https://github.com/nodejs/snap +- [Бінарні дистрибутиви Node.js](#debian-and-ubuntu-based-linux-distributions) обслуговуються та підтримуються [NodeSource](https://github.com/nodesource/distributions) + +## Дистрибутиви Linux на базі Debian та Ubuntu + +[Бінарні дистрибутиви Node.js](https://github.com/nodesource/distributions) доступні на NodeSource. + +### Альтернативи + +Пакети, сумісні з дистрибутивами Linux на базі Debian та Ubuntu, доступні на [snaps Node.js](#snap). + +## Exherbo Linux + +Node.js і пакети npm доступні в [репозиторії arbor](https://gitlab.exherbo.org/exherbo/arbor/-/tree/master/packages/dev-lang/node). + +```bash +cave resolve -x node +``` + +## fnm + +Швидкий і простий менеджер версій Node.js, створений на Rust, використовується для керування багатьма випущеними версіями Node.js. Він дозволяє виконувати такі операції, як установка, видалення, автоматична зміна версій Node залежно від поточної директорії тощо. +Щоб установити fnm, використайте [цей скрипт](https://github.com/Schniz/fnm#using-a-script-macoslinux). + +fnm кросплатформний (macOS, Windows, Linux) та підтримує всі популярні оболонки (Bash, Zsh, Fish, PowerShell, командний рядок Windows). +fnm створено з думкою про швидкість та підтримку сумісності для файлів `.node-version` та `.nvmrc`. + +## FreeBSD + +Останній реліз Node.js доступний через порт [www/node](https://www.freshports.org/www/node). + +Установіть бінарний пакет через [pkg](https://www.freebsd.org/cgi/man.cgi?pkg): + +```bash +pkg install node +``` + +Або скомпілюйте його самостійно через [порти](https://www.freebsd.org/cgi/man.cgi?ports): + +```bash +cd /usr/ports/www/node && make install +``` + +## Gentoo + +Node.js доступний у дереві portage. + +```bash +emerge nodejs +``` + +## IBM i + +LTS-версії Node.js доступні від IBM через [менеджер пакетів 'yum'](https://ibm.biz/ibmi-rpms). Назва пакета: `nodejs`, після нього номер основної версії (наприклад, `nodejs18`, `nodejs20` тощо) + +Щоб установити Node.js 20.x з командного рядка, запустіть наступну команду як користувач зі спеціальними повноваженнями \*ALLOBJ: + +```bash +yum install nodejs20 +``` + +Node.js також можна встановити за допомогою продукту «IBM i Access Client Solutions». Перегляньте [цей документ](http://www-01.ibm.com/support/docview.wss?uid=nas8N1022619), щоб дізнатися більше + +## macOS + +Завантажте [інсталятор macOS](/#home-downloadhead) безпосередньо з вебсайту [nodejs.org](https://nodejs.org/). + +_Якщо ви бажаєте завантажити пакет через bash:_ + +```bash +curl "https://nodejs.org/dist/latest/$(curl -s https://nodejs.org/dist/latest/ | grep "pkg" | cut -d'"' -f 2)" -o "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/" +``` + +### Альтернативи + +Через **[Homebrew](https://brew.sh/)**: + +```bash +brew install node +``` + +Через **[MacPorts](https://www.macports.org/)**: + +```bash +port install nodejs + +# Example +port install nodejs7 +``` + +Через **[pkgsrc](https://pkgsrc.joyent.com/install-on-macos/)**: + +Установіть бінарний пакет: + +```bash +pkgin -y install nodejs +``` + +Або зберіть уручну з pkgsrc: + +```bash +cd pkgsrc/lang/nodejs && bmake install +``` + +## n + +`n` — простий у використанні менеджер версій Node.js для платформ Mac і Linux. Укажіть цільову версію для встановлення за допомогою розширеного синтаксису або оберіть у меню раніше завантажених версій. Версії встановлюються на рівні системи чи користувача, а для більш цільового використання можна запускати її безпосередньо з кешованих завантажень. + +Відвідайте [головну сторінку](https://github.com/tj/n), щоб дізнатися методи установки (bootstrap, npm, Homebrew, сторонні) та деталі використання. + +Якщо у вас уже є `npm`, то установка `n` та найновішої LTS-версії `node` дуже проста: + +``` +npm install -g n +n lts +``` + +## NetBSD + +Node.js доступний у дереві pkgsrc: + +```bash +cd /usr/pkgsrc/lang/nodejs && make install +``` + +Або встановіть бінарний пакет (якщо доступний для вашої платформи) через pkgin: + +```bash +pkgin -y install nodejs +``` + +## Nodenv + +`nodenv` — легковаговий менеджер версій Node, подібний до `nvm`. Простий та інтуїтивний у використанні. Широка екосистема плагінів дозволяє налаштувати його відповідно до ваших потреб. Використовуйте `nodenv`, щоб обрати версію Node для вашої програми та переконатися, що ваше середовище розробки відповідає клієнтському середовищу. + +Інструкції зі встановлення Nodenv є [на його сторінці Github](https://github.com/nodenv/nodenv#installation). Будь ласка, відвідайте її, щоб використовувати останню версію кроків установки. + +## nvm + +Node Version Manager — це bash-скрипт, що використовується для керування різними випущеними версіями Node.js. Він дозволяє виконувати наступні операції: установка, видалення, зміна версії тощо. Щоб установити nvm, використайте [цей скрипт](https://github.com/nvm-sh/nvm#install--update-script). + +На системах Unix / OS X Node.js, зібраний із вихідного коду, можна встановити за допомогою [nvm](https://github.com/creationix/nvm), установивши в директорію, яку вимагає nvm: + +```bash +env VERSION=`python tools/getnodeversion.py` make install DESTDIR=`nvm_version_path v$VERSION` PREFIX="" +``` + +Після цього ви можете використовувати `nvm`, щоб перемикатися між релізовими версіями та версіями, зібраними з вихідного коду. +Для прикладу, якщо версія Node.js — v8.0.0-pre: + +```bash +nvm use 8 +``` + +Коли вийде офіційний реліз, ви можете видалити версію, зібрану з вихідного коду: + +```bash +nvm uninstall 8 +``` + +## nvs + +#### Windows + +Менеджер версій `nvs` кросплатформний та може використовуватися на Windows, macOS та системах типу Unix + +Щоб установити `nvs` на Windows, перейдіть на [сторінку релізів](https://github.com/jasongin/nvs/releases) і завантажте MSI-інсталятор останнього релізу. + +Ви також можете використати `chocolatey` для установки: + +```bash +choco install nvs +``` + +#### macOS, системи типу Unix + +Ви можете знайти документацію щодо кроків інсталяції `nvs` на macOS та системах типу Unix [тут](https://github.com/jasongin/nvs/blob/master/doc/SETUP.md#mac-linux) + +#### Використання + +Після цього ви можете використовувати `nvs`, щоб перемикатися між різними версіями Node. + +Щоб додати її останню версію: + +```bash +nvs add latest +``` + +Чи додати її останню LTS-версію: + +```bash +nvs add lts +``` + +Тоді запустіть команду `nvs use`, щоб додати версію Node до своєї `PATH` для поточної оболонки: + +```bash +$ nvs use lts +PATH -= %LOCALAPPDATA%\nvs\default +PATH += %LOCALAPPDATA%\nvs\node\14.17.0\x64 +``` + +Щоб додати її до `PATH` назавжди, використайте `nvs link`: + +```bash +nvs link lts +``` + +## OpenBSD + +Node.js доступний через систему портів. + +```bash +/usr/ports/lang/node +``` + +Через [pkg_add](https://man.openbsd.org/OpenBSD-current/man1/pkg_add.1) на OpenBSD: + +```bash +pkg_add node +``` + +## openSUSE та SLE + +Node.js доступний у головних репозиторіях у наступних пакетах: + +- **openSUSE Leap 15.2**: `nodejs10`, `nodejs12`, `nodejs14` +- **openSUSE Tumbleweed**: `nodejs20` +- **SUSE Linux Enterprise Server (SLES) 12**: `nodejs10`, `nodejs12`, and `nodejs14` + (Модуль «Web and Scripting Module» має бути [ввімкнений](https://www.suse.com/releasenotes/x86_64/SUSE-SLES/12-SP5/#intro-modulesExtensionsRelated).) +- **SUSE Linux Enterprise Server (SLES) 15 SP2**: `nodejs10`, `nodejs12`, and `nodejs14` + (Модуль «Web and Scripting Module» має бути [ввімкнений](https://www.suse.com/releasenotes/x86_64/SUSE-SLES/15/#Intro.Module).) + +Для прикладу, щоб встановити Node.js 14.x на openSUSE Leap 15.2, запустіть наступну команду в корені: + +```bash +zypper install nodejs14 +``` + +Можна встановити та використовувати різні основні версії Node одночасно. + +## SmartOS та illumos + +Образи SmartOS мають уже інстальований pkgsrc. Для інших дистрибутивів illumos спершу встановіть **[pkgsrc](https://pkgsrc.joyent.com/install-on-illumos/)**, тоді ви зможете встановити бінарний пакет звичайним чином: + +```bash +pkgin -y install nodejs +``` + +Або зберіть уручну з pkgsrc: + +```bash +cd pkgsrc/lang/nodejs && bmake install +``` + +## Snap + +[Snaps Node.js](https://github.com/nodejs/snap) доступні як [`node`](https://snapcraft.io/node) у крамниці Snap. + +## Solus + +Solus надає Node.js у своєму головному репозиторії. + +```bash +sudo eopkg install nodejs +``` + +## vfox + +Кросплатформний (Windows, macOS, Linux) і **розширюваний** менеджер версій. + +Підтримує **різні версії для різних проєктів**, **різні версії для різних оболонок**, а також дає можливість перемикати версії Node автоматично на основі поточної директорії тощо. + +Підтримує всі популярні оболонки (Bash, Zsh, Fish, PowerShell, Clink, Cmder). + +Перегляньте [швидкий старт](https://vfox.lhan.me/guides/quick-start.html), щоб почати використовувати vfox та дізнатися всі деталі його використання. + +## Void Linux + +Void Linux надає стабільний Node.js в основному репозиторії. + +```bash +xbps-install -Sy nodejs +``` + +## Windows + +Завантажте [інсталятор Windows](/#home-downloadhead) безпосередньо з вебсайту [nodejs.org](https://nodejs.org/). + +### Альтернативи + +Через **[Winget](https://aka.ms/winget-cli)**: + +```bash +winget install OpenJS.NodeJS +# or for LTS +winget install OpenJS.NodeJS.LTS +``` + +Після запуску однієї з двох команд вище, можливо, необхідно буде перезапустити емулятор термінала, перш ніж CLI-команда `node` стане доступною. + +Через **[Chocolatey](https://chocolatey.org/)**: + +```bash +cinst nodejs +# or for full install with npm +cinst nodejs.install +``` + +Через **[Scoop](https://scoop.sh/)**: + +```bash +scoop install nodejs +# or for LTS +scoop install nodejs-lts +``` + +## z/OS + +IBM® SDK для Node.js — z/OS® доступний у двох інсталяційних форматах: +SMP/E та PAX. Оберіть підхожий вам формат: + +- [Установка та налаштування Node.js із SMP/E на z/OS](https://www.ibm.com/docs/en/sdk-nodejs-zos/14.0?topic=configuring-installing-smpe-edition) +- [Установка та налаштування Node.js із PAX на z/OS](https://www.ibm.com/docs/en/sdk-nodejs-zos/14.0?topic=configuring-installing-pax-edition) diff --git a/apps/site/pages/uk/download/package-manager/current.mdx b/apps/site/pages/uk/download/package-manager/current.mdx index 23f84f4a1a8de..b51fd9e8490ce 100644 --- a/apps/site/pages/uk/download/package-manager/current.mdx +++ b/apps/site/pages/uk/download/package-manager/current.mdx @@ -15,7 +15,7 @@ Node.js містить . Читайте список змін для цієї версії -Читайте блог для цієї версії +Читайте публікацію в блозі про цю версію Дізнайтеся, як перевірити підписані SHASUMS diff --git a/apps/site/pages/uk/download/package-manager/index.mdx b/apps/site/pages/uk/download/package-manager/index.mdx index 23f84f4a1a8de..b51fd9e8490ce 100644 --- a/apps/site/pages/uk/download/package-manager/index.mdx +++ b/apps/site/pages/uk/download/package-manager/index.mdx @@ -15,7 +15,7 @@ Node.js містить . Читайте список змін для цієї версії -Читайте блог для цієї версії +Читайте публікацію в блозі про цю версію Дізнайтеся, як перевірити підписані SHASUMS diff --git a/apps/site/pages/uk/download/prebuilt-binaries/current.mdx b/apps/site/pages/uk/download/prebuilt-binaries/current.mdx new file mode 100644 index 0000000000000..01e1877a47d1d --- /dev/null +++ b/apps/site/pages/uk/download/prebuilt-binaries/current.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: Завантаження Node.js® +subtitle: Завантажте Node.js так, як ви бажаєте. +--- + +
+Мені потрібна версія Node.js для розрядності + + +
+ +
+Node.js містить . + +Читайте список змін для цієї версії + +Читайте публікацію в блозі про цю версію + +Дізнайтеся, як перевірити підписані SHASUMS + +Перегляньте бінарні файли нічних збірок або неофіційні збірки для інших платформ + +
diff --git a/apps/site/pages/uk/download/prebuilt-binaries/index.mdx b/apps/site/pages/uk/download/prebuilt-binaries/index.mdx new file mode 100644 index 0000000000000..f829dc5736845 --- /dev/null +++ b/apps/site/pages/uk/download/prebuilt-binaries/index.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: Завантаження Node.js® +subtitle: Завантажте Node.js так, як ви бажаєте. +--- + +
+Мені потрібна версія Node.js для розрядності + + +
+ +
+Node.js містить . + +Читайте список змін для цієї версії. + +Читайте публікацію в блозі про цю версію. + +Дізнайтеся, як перевірити підписані SHASUMS. + +Перегляньте бінарні файли нічних збірок, усі бінарні файли релізу або неофіційні збірки для інших платформ. + +
diff --git a/apps/site/pages/uk/download/prebuilt-installer/current.mdx b/apps/site/pages/uk/download/prebuilt-installer/current.mdx new file mode 100644 index 0000000000000..9b7217bfd6129 --- /dev/null +++ b/apps/site/pages/uk/download/prebuilt-installer/current.mdx @@ -0,0 +1,26 @@ +--- +layout: download +title: Завантаження Node.js® +subtitle: Завантажте Node.js так, як ви бажаєте. +--- + +
+Мені потрібна версія Node.js для розрядності + + +
+ +
+Node.js містить . + +Читайте список змін для цієї версії + +Читайте публікацію в блозі про цю версію + +Дізнайтеся, як перевірити підписані SHASUMS + +Перегляньте всі доступні опції завантаження Node.js + +Дізнайтеся більше про релізи Node.js + +
diff --git a/apps/site/pages/uk/download/prebuilt-installer/index.mdx b/apps/site/pages/uk/download/prebuilt-installer/index.mdx new file mode 100644 index 0000000000000..ff5860331089b --- /dev/null +++ b/apps/site/pages/uk/download/prebuilt-installer/index.mdx @@ -0,0 +1,26 @@ +--- +layout: download +title: Завантажити Node.js® +subtitle: Завантажте Node.js так, як ви бажаєте. +--- + +
+Мені потрібна Node.js версії для розрядності + + +
+ +
+Node.js містить . + +Читайте список змін для цієї версії + +Читайте публікацію в блозі про цю версію + +Дізнайтеся, як перевірити підписані SHASUMS + +Перегляньте всі доступні опції завантаження Node.js + +Дізнайтеся більше про релізи Node.js + +
diff --git a/apps/site/pages/uk/download/source-code/current.mdx b/apps/site/pages/uk/download/source-code/current.mdx index c2fb8c2121197..298aa7b150d19 100644 --- a/apps/site/pages/uk/download/source-code/current.mdx +++ b/apps/site/pages/uk/download/source-code/current.mdx @@ -15,7 +15,7 @@ Node.js містить . Читайте список змін для цієї версії -Читайте блог для цієї версії +Читайте публікацію в блозі про цю версію Дізнайтеся, як перевірити підписані SHASUMS diff --git a/apps/site/pages/uk/download/source-code/index.mdx b/apps/site/pages/uk/download/source-code/index.mdx index 3c49438324323..1493d3c29b2cb 100644 --- a/apps/site/pages/uk/download/source-code/index.mdx +++ b/apps/site/pages/uk/download/source-code/index.mdx @@ -15,7 +15,7 @@ Node.js містить . Прочитайте список змін для цієї версії -Прочитайте блог для цієї версії +Читайте публікацію в блозі про цю версію Дізнайтеся, як перевірити підписані SHASUMS diff --git a/apps/site/pages/uk/index.mdx b/apps/site/pages/uk/index.mdx index 54ed7fa6bfc26..4e4bf73d5184a 100644 --- a/apps/site/pages/uk/index.mdx +++ b/apps/site/pages/uk/index.mdx @@ -21,7 +21,7 @@ Node.js® — це безплатне, кросплатформне середо Завантажує Node.js {release.versionWithPrefix} 1 із довгостроковою підтримкою. - Також, Node.js можна встановити за допомогоюменеджерів пакетів. + Node.js також можна встановити через менеджери пакетів. )} @@ -132,6 +132,6 @@ if (isMainThread) { -Дізнайтеся більше про можливості Node.js [із нашими навчальними матеріалами](/learn). +Дізнайтеся більше про можливості Node.js із [нашими навчальними матеріалами](/learn). diff --git a/apps/site/pages/zh-cn/download/prebuilt-binaries/index.mdx b/apps/site/pages/zh-cn/download/prebuilt-binaries/index.mdx index 249d2a3a493a1..8ffabcc6b3349 100644 --- a/apps/site/pages/zh-cn/download/prebuilt-binaries/index.mdx +++ b/apps/site/pages/zh-cn/download/prebuilt-binaries/index.mdx @@ -13,12 +13,12 @@ subtitle: 以您喜欢的方式下载 Node.js。
Node.js 已包含 。 -阅读关于 此版本 的变更日志 +阅读关于 此版本 的变更日志. -阅读 此版本 的博客文章。 +阅读关于 此版本 的博客文章. 学习如何 验证签名的 SHASUMS。 -查看 Nightly 的预编译二进制文件或者适用于其他平台的 非官方构建 版本 +查看 Nightly 的预编译二进制文件,所有 Release 预编译二进制文件,或者适用于其他平台的 非官方构建 版本.
diff --git a/apps/site/pages/zh-tw/about/branding.mdx b/apps/site/pages/zh-tw/about/branding.mdx new file mode 100644 index 0000000000000..3f8ae48f8962c --- /dev/null +++ b/apps/site/pages/zh-tw/about/branding.mdx @@ -0,0 +1,72 @@ +--- +title: Node.js 的品牌形象 +layout: about +--- + +Node.js 的品牌形象 + +請閱讀[商標政策](https://trademark-policy.openjsf.org/)以取得 Node.js® 商標與標誌的使用權資訊。 + +## Node.js 吉祥物 + +Node.js 吉祥物 + +## Node.js® 標誌 + +### Node.js® 橫向標誌 + + + + + + + +
+ Node.js® 暗色橫向標誌 + + Node.js® 亮色橫向標誌 +
+ +### Node.js® 堆疊標誌 + + + + + + + + + + + + + +
+ Node.js® 暗色堆疊標誌 + + Node.js® 亮色堆疊標誌 +
+ Node.js® 黑色堆疊標誌 + + Node.js® 白色堆疊標誌 +
+ +### JS 圖示 + + + + + + + +
+ 綠色 JS 圖示 + + 白色 JS 圖示 +
diff --git a/apps/site/pages/zh-tw/about/get-involved/collab-summit.md b/apps/site/pages/zh-tw/about/get-involved/collab-summit.md new file mode 100644 index 0000000000000..d56bc3a7a5926 --- /dev/null +++ b/apps/site/pages/zh-tw/about/get-involved/collab-summit.md @@ -0,0 +1,16 @@ +--- +title: 協作高峰會 +layout: about +--- + +# 協作高峰會 + +Node.js 協作高峰會是一場非正式會議,旨在匯聚現有和潛在的貢獻者,透過現場協作、教學和知識分享的方式進行 Node.js 相關討論。來自社群的團隊、工作小組和貢獻者每年固定聚會兩次,一起做出重要的決定,同時面對面推進重大事項的進展。 + +## 參與者有哪些? + +協作高峰會主要由現有的貢獻者和社群成員參加,但也歡迎尚未成為貢獻者的人共襄盛舉。如果你剛開始投入 Node.js 社群,請務必抓緊協作高峰會這個大好機會,瞭解社群內部的動態,並運用既有及待開發的技能做出貢獻。 + +在高峰會開始之前,貢獻者和社群成員會遞交會議提案以制定議程。與會者可以在抵達現場前先熟悉會議內容,進行一般的協作者討論,然後深入參與各個專題討論。此外,還會有許多機會在走廊上進行交流和腦力激盪。 + +如欲瞭解往後與過去的協作高峰會資訊,請查看[高峰會儲存庫](https://github.com/openjs-foundation/summit)及[已提出問題](https://github.com/nodejs/summit/issues),熟悉貢獻者和社群成員計劃當面討論的內容。 diff --git a/apps/site/pages/zh-tw/about/get-involved/contribute.md b/apps/site/pages/zh-tw/about/get-involved/contribute.md new file mode 100644 index 0000000000000..27e2eb205e78e --- /dev/null +++ b/apps/site/pages/zh-tw/about/get-involved/contribute.md @@ -0,0 +1,47 @@ +--- +title: 做出貢獻 +layout: about +--- + +# 做出貢獻 + +感謝你有意為 Node.js 做出貢獻!達成此目的的方式和領域非常多樣化,我們很樂意為你提供協助。 + +## 尋求一般協助 + +由於 `nodejs/node` 專案的更新非常頻繁,因此與 Node.js 相關的一般問題或請求請至 [Node.js 支援儲存庫](https://github.com/nodejs/help/issues)提問。 + +## 回報問題 + +若你發現了 Node.js 的漏洞,歡迎至 GitHub 專案中提出問題,但請務必提供可重現且不包含任何外部依賴項的測試實例,也就是說執行該實例的過程中不需使用 Node.js 以外的工具。 + +回報問題時,請盡可能詳述執行環境的相關資訊。由於我們無法預知排查問題時所需的參考依據,因此請至少提供下列資訊: + +- Node.js 版本 +- 作業系統 (macOS、SmartOS、 Linux 或 Windows) +- 作業系統架構 (32bit 或 64bit 及 x86 或 ARM) + +Node.js 專案目前在多個不同的 GitHub 儲存庫中進行管理,每個儲存庫都有自己獨立的問題資料庫。如果可以的話,請將問題直接遞交至相應的儲存庫,但就算問題送錯了地方也不用擔心,社群的貢獻者會很樂意幫你指引方向。 + +- 如欲報告 Node.js 相關問題,請使用 [nodejs/node](https://github.com/nodejs/node) +- 如欲報告與本站相關的問題,請使用 [nodejs/nodejs.org](https://github.com/nodejs/nodejs.org/issues) + +## 程式碼貢獻 + +若你想協助 Node.js 修復錯誤或新增功能,請先詳讀 [Node.js 貢獻指南](https://github.com/nodejs/node/blob/main/CONTRIBUTING.md/#pull-requests)。該指南也解釋了現有合作者對該專案所有貢獻的審查流程。 + +如果你不知道從何著手,可以查看 [Node 待辦清單](https://www.nodetodo.org/),遵循其中的指引完成第一次貢獻。 + +## 成為協作者 + +當貢獻者成為協作者後會對專案產生更大的影響力,可以審查他人的貢獻、分類處理問題,並大幅型塑專案的未來。對任何 Node.js 儲存庫做出重大且有價值貢獻者在被 TSC 認可後即可成為協作者,並獲得該專案的上傳存取權限。評估標準包括但不限於以下活動之品質: + +- 程式碼上傳與拉取請求 +- 文件上傳與拉取請求 +- 回覆問題與拉取請求 +- 對 Node.js 網站做出貢獻 +- 向終端用戶和新手貢獻者提供的幫助 +- 工作小組參與度 +- 更廣泛的 Node.js 社群參與度 + +若有人做出了意義重大的貢獻,卻認為自己並未進入上傳存取權的候選名單,可以[提出問題](https://github.com/nodejs/TSC/issues)或[直接聯絡 TSC 成員](https://github.com/nodejs/node#tsc-technical-steering-committee)。 diff --git a/apps/site/pages/zh-tw/about/get-involved/events.mdx b/apps/site/pages/zh-tw/about/get-involved/events.mdx new file mode 100644 index 0000000000000..240b4dbea1b61 --- /dev/null +++ b/apps/site/pages/zh-tw/about/get-involved/events.mdx @@ -0,0 +1,16 @@ +--- +title: 近期活動 +layout: about +--- + +## 近期活動 + +Node.js 的活動對外開放,歡迎所有人踴躍參加。 + +### Node.js® 近期會議 + +Node.js 專案每年都會召開多次會議,討論並規劃各方面的細節。 + +下列為七天內即將舉行的會議。 + + diff --git a/apps/site/pages/zh-tw/about/get-involved/index.md b/apps/site/pages/zh-tw/about/get-involved/index.md new file mode 100644 index 0000000000000..fce97a65355cb --- /dev/null +++ b/apps/site/pages/zh-tw/about/get-involved/index.md @@ -0,0 +1,26 @@ +--- +title: 加入我們 +layout: about +--- + +# 加入我們 + +## 社群討論 + +- [GitHub 問題清單](https://github.com/nodejs/node/issues) 是討論 Node.js 核心功能的區域。 +- 若要進行 Node.js 開發相關的即時聊天,請使用以下其中一個平台 + - 針對 IRC,請使用 [IRC 客戶端](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients)連線至 `#node.js` 頻道中的 `irc.libera.chat`,或使用[網頁客戶端](https://kiwiirc.com/nextclient/)透過瀏覽器連線至該頻道。 + - 針對 Slack,則有兩種選項: + - [OpenJSF Slack](https://slack-invite.openjsf.org/) 乃是由基金會經營的 Slack ,其中包含多個 Node.js 頻道 (以 #nodejs- 為前綴的頻道皆與該專案相關)。 + - [Node Slackers](https://www.nodeslackers.com/) 是一個專注於 Node.js 的 Slack 社群。 +- Node.js 的官方 Twitter 帳號是 [nodejs](https://twitter.com/nodejs)。 +- [Node.js 專案行事曆](https://nodejs.org/calendar)包含所有公開的團隊會議。 + +## 學習素材 + +- Node.js 網站的[官方學習區](https://nodejs.org/en/learn/)。 +- [官方 API 參考文件](https://nodejs.org/api/)。 +- [NodeSchool.io](https://nodeschool.io/) 會透過命令列遊戲傳授 Node.js 的概念。 +- [Stack Overflow 的 Node.js 標籤](https://stackoverflow.com/questions/tagged/node.js)每天都會收集最新資訊。 +- [The DEV Community Node.js tag](https://dev.to/t/node) 是供開發者分享 Node.js 專案、文章與教學,以及討論 Node.js 相關主題、收集他人意見的地方。無論程度如何都歡迎踴躍參與。 +- [Nodeiflux](https://discordapp.com/invite/vUsrbjd) 是一個友善的 Node.js 後端開發者社群,成員們在 Discord 上相互支援。 diff --git a/apps/site/pages/zh-tw/about/governance.md b/apps/site/pages/zh-tw/about/governance.md new file mode 100644 index 0000000000000..c97d04939e838 --- /dev/null +++ b/apps/site/pages/zh-tw/about/governance.md @@ -0,0 +1,31 @@ +--- +title: 專案治理 +layout: about +--- + +# 專案治理 + +## 共識尋求過程 + +Node.js 專案遵循共識尋求的決策模式。 + +## 協作者 + +[nodejs/node][] 核心 GitHub 儲存庫由協作者維護,這些負責人是由其他現有協作者持續提名選出的。 + +做出重要貢獻者會被任命為協作者並獲得專案的上傳權限。其人選由其他協作者篩選、提名,並與現有協作者討論。 + +如欲查看目前的協作者清單,請參閱專案的 [README.md][]。 + +如需協作者指南請參閱 [collaborator-guide.md][]。 + +## 技術指導委員會 + +本專案由負責專案的高層指導的技術指導委員會 (TSC) 管理。TSC 是由現有 TSC 成員提名的一部分活躍協作者組成的。 + +[consensus seeking]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making +[readme.md]: https://github.com/nodejs/node/blob/main/README.md#current-project-team-members +[tsc]: https://github.com/nodejs/TSC +[technical steering committee (tsc)]: https://github.com/nodejs/TSC/blob/main/TSC-Charter.md +[collaborator-guide.md]: https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md +[nodejs/node]: https://github.com/nodejs/node diff --git a/apps/site/pages/zh-tw/about/index.mdx b/apps/site/pages/zh-tw/about/index.mdx new file mode 100644 index 0000000000000..81b70befaa623 --- /dev/null +++ b/apps/site/pages/zh-tw/about/index.mdx @@ -0,0 +1,60 @@ +--- +title: 關於 Node.js® +layout: about +--- + +關於 Node.js® + +Node.js 身為非同步事件驅動的 JavaScript 執行環境,旨在建構可擴展的網路應用程式。在下面的 "hello world" 範例中,Node.js 可以同時處理多個併發連線。每個連線都會觸發回調函式,但如果沒有任何工作需要處理, Node.js 就會進入休眠。 + +```cjs +const { createServer } = require('node:http'); + +const hostname = '127.0.0.1'; +const port = 3000; + +const server = createServer((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Hello World'); +}); + +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +}); +``` + +```mjs +import { createServer } from 'node:http'; + +const hostname = '127.0.0.1'; +const port = 3000; + +const server = createServer((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Hello World'); +}); + +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +}); +``` + +這與目前更常見的作業系統線程併發模型形成鮮明對比。線程導向的網路效率相對較低且難以使用。此外,Node.js 的使用者也不必擔心死鎖問題,因為系統中並沒有鎖機制。Node.js 中幾乎沒有直接執行 I/O 的函數,所以除了使用 Node.js 標準庫的同步方法進行 I/O 外,進程不會被阻塞。由於沒有阻塞,因此在 Node.js 中開發可擴展的系統就非常容易。 + +如果對上文中部分用語不熟悉,可以參考關於阻塞與非阻塞的完整文章。 + +--- + +Node.js 在設計上類似於 Ruby 的 [Event Machine][] 和 Python 的 [Twisted][] 等系統,也受到了它們的影響並進一步發展事件模型。它將事件循環呈現為一個運行時結構而非函數庫。在其他系統中,總是需要阻塞調用才能啟動事件循環。通常,行為是在腳本開始時透過回調進行定義,並在結尾透過 `EventMachine::run()` 等阻塞調用啟動伺服器。然而在 Node.js 中卻沒有這種啟動事件循環的調用。Node.js 會在執行輸入腳本後直接進入事件循環。若沒有更多回調需要執行,Node.js 就會退出事件循環。這種行為類似於瀏覽器中的 JavaScript,事件循環對使用者是隱藏的。 + +HTTP 是 Node.js 中的一等公民,在設計時就考慮到了流處理和低延遲。這使得 Node.js 非常適合作為 web 函式庫或框架的基礎。 + +Node.js 的設計中沒有使用執行緒,但這並不代表環境中的多核就無法利用。你可以透過我們的 `child_process.fork()][]` API 產生專為便利通訊設計的子進程。基於相同介面的 `[cluster][]` 模組允許你在進程之間共享套接字,以實現多核之間的負載均衡。 + +[阻塞與非阻塞]: /learn/asynchronous-work/overview-of-blocking-vs-non-blocking +[`child_process.fork()`]: https://nodejs.org/api/child_process.html +[`cluster`]: https://nodejs.org/api/cluster.html +[event machine]: https://github.com/eventmachine/eventmachine +[twisted]: https://twisted.org/ diff --git a/apps/site/pages/zh-tw/about/previous-releases.mdx b/apps/site/pages/zh-tw/about/previous-releases.mdx new file mode 100644 index 0000000000000..fce7d2f0ab3c9 --- /dev/null +++ b/apps/site/pages/zh-tw/about/previous-releases.mdx @@ -0,0 +1,18 @@ +--- +title: Node.js 版本 +layout: about +--- + +Node.js 版本 + +Node.js 的主要版本在釋出後六個月內皆處於最新 (Current) 狀態,讓函數庫作者有時間為其新增支援功能。六個月後,奇數編號的釋出版本 (如 9、11 等) 會停止支援,而偶數編號的釋出版本 (如 10、12 等) 會進入活躍 LTS (Active LTS) 狀態,開放一般大眾使用。LTS 狀態代表「長期支援」,在 30 個月內發現的重大錯誤通常都會得到修復。生產環境的應用程式僅應使用活躍 LTS 或維護 LTS (Maintenance LTS) 版本。 + +## 釋出時間表 + +![版本釋出](https://raw.githubusercontent.com/nodejs/Release/main/schedule.svg?sanitize=true) + +Node.js 的詳細釋出時間表請見 [Github](https://github.com/nodejs/release#release-schedule)。 + +## 你在找特定版本分支的最新版嗎? + + diff --git a/apps/site/pages/zh-tw/about/security-reporting.mdx b/apps/site/pages/zh-tw/about/security-reporting.mdx new file mode 100644 index 0000000000000..7f41b4ba9fcea --- /dev/null +++ b/apps/site/pages/zh-tw/about/security-reporting.mdx @@ -0,0 +1,65 @@ +--- +title: 安全性回報 +layout: about +--- + +安全性回報 + +如欲瞭解更多安全策略的相關資訊,請查看[此頁面](https://github.com/nodejs/node/security/policy)。 + +## 回報 Node.js 中的錯誤 + +你可以透過 [HackerOne](https://hackerone.com/nodejs) 回報 Node.js 的安全性錯誤。 + +你的報告將在 5 天內得到確認,並且將在 10 天內收到更詳細的回覆,說明後續的處理步驟。 + +在安全團隊針對你的報告做出初步回覆後,將會盡力通知你修復和完整公告的進展,也有可能要求提供與報告相關的額外資訊或指導。 + +### Node.js 漏洞獎勵計畫 + +Node.js 專案為安全研究人員和盡責公開揭露設立了官方漏洞獎勵計畫。該計畫透過 HackerOne 平台進行管理。詳情請見 [https://hackerone.com/nodejs](https://hackerone.com/nodejs)。 + +## 回報第三方模塊的錯誤 + +第三方模塊的錯誤應回報給其相應維護者。 + +## 揭露政策 + +下列為 Node.js 的安全揭露政策 + +安全報告接受後將指派給一位主要處理人。這位人員將會協調修復和釋出流程。當問題確認後,將整理出所有受影響的版本清單。隨後審核程式碼以排查任何潛在的類似問題。接著針對所有仍在維護中的版本提出修復方案。修復內容不會上傳至公開儲存庫,而是在等待公告期間暫時保存在本機。 + +針對該漏洞選定建議的解禁日期,並申請一組 CVE® (通用漏洞和揭露,Common Vulnerabilities and Exposures) 編號。 + +在保密日期截止當天,Node.js 安全郵件清單會收到公告的副本。變更內容將推送至公共儲存庫,同時新版本將部署到 nodejs.org。在 +郵件清單收到通知的 6 小時內,公告副本就會張貼在 Node.js 部落格上。 + +一般而言解禁日期會訂於 CVE 核發的 72 小時後,但仍可能依照漏洞的複雜度及部署的困難度而有變化。 + +整個流程需要耗費不少時間,尤其在需要與其他專案維護者協調的情況下更是如此。雖然我們會盡快處理漏洞,但我們仍須遵循上述釋出流程以貫徹揭露政策。 + +## 接收安全性更新 + +安全性通知將由以下管道送出。 + +[Google 網路論壇](https://groups.google.com/group/nodejs-sec) +[Node.js 部落格](/blog) + +## 針對此政策提出建議 + +若你有任何改進此流程的建議,請建立[拉取請求](https://github.com/nodejs/nodejs.org)或[提出問題](https://github.com/nodejs/security-wg/issues/new)進行討論。 + +## OpenSSF 最佳實踐 + + + OpenSSF 徽章 + + +開源安全基金會 (OpenSSF) [最佳實踐徽章](https://github.com/coreinfrastructure/best-practices-badge)的意義是為奉行最佳實踐的自由/開源軟體 (FLOSS) 專案提供背書。專案可以自發認證每項最佳實踐的遵循情況,徽章的使用者則可以快速評估哪些 FLOSS 專案確實遵循最佳實踐,因此更有可能產出安全又高品質的軟體。 diff --git a/apps/site/pages/zh-tw/download/package-manager/all.md b/apps/site/pages/zh-tw/download/package-manager/all.md new file mode 100644 index 0000000000000..91ebc274fe5d8 --- /dev/null +++ b/apps/site/pages/zh-tw/download/package-manager/all.md @@ -0,0 +1,421 @@ +--- +layout: download +title: 使用套件管理器安裝 Node.js +--- + +# 使用套件管理器安裝 Node.js + +> 本站上的套件皆由各自的套件管理器維護與支援,**並非**由 Node.js 的核心團隊維護。若遭遇任何問題,請向該套件的維護者回報。如果問題確實是 Node.js 本身的錯誤,將由維護者負責向上游回報。 + +--- + +- [Alpine Linux](#alpine-linux) +- [Android](#android) +- [Arch Linux](#arch-linux) +- [CentOS, Fedora 與 Red Hat Enterprise Linux](#centos-fedora-and-red-hat-enterprise-linux) +- [基於 Debian 與 Ubuntu 的 Linux 發行版](#debian-and-ubuntu-based-linux-distributions) +- [Exherbo Linux](#exherbo-linux) +- [fnm](#fnm) +- [FreeBSD](#freebsd) +- [Gentoo](#gentoo) +- [IBM i](#ibm-i) +- [macOS](#macos) +- [n](#n) +- [NetBSD](#netbsd) +- [Nodenv](#nodenv) +- [nvm](#nvm) +- [nvs](#nvs) +- [OpenBSD](#openbsd) +- [openSUSE 與 SLE](#opensuse-and-sle) +- [SmartOS 與 illumos](#smartos-and-illumos) +- [Snap](#snap) +- [Solus](#solus) +- [vfox](#vfox) +- [Void Linux](#void-linux) +- [Windows](#windows-1) +- [z/OS](#zos) + +--- + +## Alpine Linux + +Node.js LTS 與 npm 套件皆收錄於主儲存庫。 + +```bash +apk add nodejs npm +``` + +你可以從社群儲存庫下載 Node.js 的最新版本。 + +```bash +apk add nodejs-current +``` + +## Android + +Node.js 對於 Android 的支援系統仍在測試階段,因此 Node.js 的開發者尚未提供預編譯的二進制檔案。 + +然而,有一些第三方解決方案。例如, [Termux](https://termux.com/) 社群提供了 Android 的終端模擬器和 Linux 環境,以及自己的套件管理器和廣泛的[預編譯應用程式](https://github.com/termux/termux-packages) 。在 Termux 應用程式中使用以下命令可以安裝最新的 Node.js 版本: + +```bash +pkg install nodejs +``` + +目前,Termux 的 Node.js 二進制檔案與 `system-icu` (依賴於 libicu 套件) 進行了連結。 + +## Arch Linux + +Node.js 與 npm 套件皆收錄於主儲存庫。 + +```bash +pacman -S nodejs npm +``` + +## CentOS、Fedora 與 Red Hat Enterprise Linux + +Node.js 在 CentOS/RHEL 8 和 Fedora 中以 `nodejs` 模組的名稱開放使用。 + +```bash +dnf module install nodejs: +``` + +其中 對應 Node.js 的主要版本。 +可用的流清單請見下表: + +```bash +dnf module list nodejs +``` + +舉例而言,安裝 Node.js 18 應遵循下列步驟: + +```bash +dnf module install nodejs:18/common +``` + +### 替代方案 + +這些資源提供與 CentOS、Fedora 和 RHEL 相容的套件。 + +- [Node.js snaps](#snap) 由 https://github.com/nodejs/snap 維護與支援 +- [Node.js 二進制發行版](#debian-and-ubuntu-based-linux-distributions)由 [NodeSource](https://github.com/nodesource/distributions) 維護與支援 + +## 基於 Debian 或 Ubuntu 的 Linux 發行版 + +[Node.js 二進制發行版](https://github.com/nodesource/distributions)收錄於 NodeSource。 + +### 替代方案 + +和基於 Debian 與 Ubuntu 的 Linux 發行版相容的套件可以透過 [Node.js snaps](#snap) 取得。 + +## Exherbo Linux + +Node.js 和 npm 套件在收錄於 [arbor 版本庫](https://gitlab.exherbo.org/exherbo/arbor/-/tree/master/packages/dev-lang/node)。 + +```bash +cave resolve -x node +``` + +## fnm + +快速簡單的 Node.js 版本管理器,使用 Rust 構建,用於管理多個已釋出的 Node.js 版本。其功能包含安裝、解除安裝、根據目錄自動切換 Node 版本等。如欲安裝 fnm,請使用此[安裝腳本](https://github.com/Schniz/fnm#using-a-script-macoslinux)。 + +fnm 支援跨平台 (macOS、Windows、Linux) 以及所有主流的 shell 指令 (Bash、Zsh、 Fish、PowerShell、Windows Command Line Prompt)。 +fnm 在設計時考慮了速度,以及對 `.node-version` 和 `.nvmrc` 檔案的相容性。 + +## FreeBSD + +最新版本的 Node.js 可以透過 [www/node](https://www.freshports.org/www/node) 軟體包取得。 + +透過 [pkg](https://www.freebsd.org/cgi/man.cgi?pkg) 安裝二進制套件: + +```bash +pkg install node +``` + +或自己使用 [ports](https://www.freebsd.org/cgi/man.cgi?ports) 編譯: + +```bash +cd /usr/ports/www/node && make install +``` + +## Gentoo + +Node.js 可以透過 portage 樹取得。 + +```bash +emerge nodejs +``` + +## IBM i + +IBM 提供的 Node.js LTS 版本可以透過 [yum 套件管理器](https://ibm.biz/ibmi-rpms)取得。套件名稱為 `nodejs`,後綴為主要版本編號 (例如 `nodejs18`、`nodejs20` 等)。 + +若要從命令列安裝 Node.js 20.x,請以具有 \*ALLOBJ 特殊權限的使用者身分執行下列命令: + +```bash +yum install nodejs20 +``` + +Node.js 也可以與 IBM i Access Client Solutions 一起安裝。詳細資訊請參閱[支援文件](http://www-01.ibm.com/support/docview.wss?uid=nas8N1022619) + +## macOS + +直接從 [nodejs.org](https://nodejs.org/) 網站下載 [macOS 安裝器](/#home-downloadhead)。 + +如欲使用 bash 下載套件: + +```bash +curl "https://nodejs.org/dist/latest/$(curl -s https://nodejs.org/dist/latest/ | grep "pkg" | cut -d'"' -f 2)" -o "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/" +``` + +### 替代方案 + +使用 **[Homebrew](https://brew.sh/)**: + +```bash +brew install node +``` + +使用 **[MacPorts](https://www.macports.org/)**: + +```bash +port install nodejs + +# Example +port install nodejs7 +``` + +使用 **[pkgsrc](https://pkgsrc.joyent.com/install-on-macos/)**: + +下載二進制套件: + +```bash +pkgin -y install nodejs +``` + +或從 pkgsrc 自行編譯: + +```bash +cd pkgsrc/lang/nodejs && bmake install +``` + +## n + +`n` 是一款簡單易用的 Node.js 版本管理器,適用於 Mac 和 Linux。你可以使用豐富的語法指定欲安裝的目標版本,或者從之前下載的版本清單中進行選擇。安裝範圍可選擇全系統或以使用者為限,也可以直接從快取的下載檔案中執行特定版本。 + +請參閱[首頁](https://github.com/tj/n)以了解安裝方法 (bootstrap、npm、Homebrew、第三方) 以及所有使用詳細資訊。 + +如果你已經有 `npm`,那麼安裝 `n` 後再安裝最新的 LTS `node` 非常簡單,只需要執行下列步驟: + +``` +npm install -g n +n lts +``` + +## NetBSD + +Node.js 可於 pkgsrc 樹中取得: + +```bash +cd /usr/pkgsrc/lang/nodejs && make install +``` + +或使用 pkgin 安裝二進制套件 (如果適用於你的平台): + +```bash +pkgin -y install nodejs +``` + +## Nodenv + +`nodenv` 是一款輕量級的 Node 版本管理器,類似於 `nvm`。它不但設計簡潔,還穩定可靠。豐富的插件生態系統可以讓使用者可以隨心個人化。使用 `nodenv` 為你的應用程式選擇 Node 版本,並確保開發環境與生產環境保持一致。 + +Nodenv 安裝說明在其 [Github 頁面上](https://github.com/nodenv/nodenv#installation) 進行維護。請前往該頁面以遵循最新版本的安裝步驟。 + +## nvm + +Node Version Manager 是一個 Bash 腳本,用於管理多個已釋出的 Node.js 版本。其功能包含安裝、解除安裝、切換版本等。 +如欲安裝 nvm,請使用[此安裝腳本](https://github.com/nvm-sh/nvm#install--update-script)。 + +在 Unix / OS X 系統上,可以使用 [nvm](https://github.com/creationix/nvm) 安裝從原始碼構建的 Node.js,方法是安裝到 nvm 預期的位置: + +```bash +env VERSION=`python tools/getnodeversion.py` make install DESTDIR=`nvm_version_path v$VERSION` PREFIX="" +``` + +之後就可以使用 `nvm` 在釋出版本和從原始碼建構的版本之間切換。 +例如,如果 Node.js 的版本是 v8.0.0-pre: + +```bash +nvm use 8 +``` + +一旦正式版本釋出,就可以解除安裝從原始碼建構的版本: + +```bash +nvm uninstall 8 +``` + +## nvs + +#### Windows + +`nvs` 是一款可在 Windows、macOS 與類 Unix 系統上運行的跨平台版本管理器 + +如欲在 Windows 上安裝 `nvs`,請前往此[釋出頁面](https://github.com/jasongin/nvs/releases)下載最新版本的 MSI 安裝程式檔案。 + +此外也可以使用 `chocolatey` 安裝: + +```bash +choco install nvs +``` + +#### macOS, 類 Unix 系統 + +macOS / 類 Unix 系統安裝步驟文件請[見此](https://github.com/jasongin/nvs/blob/master/doc/SETUP.md#mac-linux) + +#### 使用方法 + +安裝後可以使用 `nvs` 切換不同版本的 node。 + +新增最新版本的 node: + +```bash +nvs add latest +``` + +或是新增最新 LTS 版本的 node: + +```bash +nvs add lts +``` + +隨後執行 `nvs use` 命令將 Node. js 版本加入目前 shell 指令的 `PATH` 中: + +```bash +$ nvs use lts +PATH -= %LOCALAPPDATA%\nvs\default +PATH += %LOCALAPPDATA%\nvs\node\14.17.0\x64 +``` + +如欲將其永久新增至 `PATH`,請使用 `nvs link`: + +```bash +nvs link lts +``` + +## OpenBSD + +Node.js 可透過 ports 系統取得。 + +```bash +/usr/ports/lang/node +``` + +在 OpenBSD 上使用 [pkg_add](https://man.openbsd.org/OpenBSD-current/man1/pkg_add.1): + +```bash +pkg_add node +``` + +## openSUSE 及 SLE + +Node.js 收錄於主儲存庫的以下軟體包: + +- **openSUSE Leap 15.2**:`nodejs10`、`nodejs12`、`nodejs14` +- **openSUSE Tumbleweed**:`nodejs20` +- **SUSE Linux Enterprise Server (SLES) 12**:`nodejs10`、`nodejs12`和`nodejs14` + (「Web 與腳本模組」必須[啟用](https://www.suse.com/releasenotes/x86_64/SUSE-SLES/12-SP5/#intro-modulesExtensionsRelated)。) +- **SUSE Linux Enterprise Server (SLES) 15 SP2**: `nodejs10`, `nodejs12`, and `nodejs14` (「Web 與腳本模組」必須[啟用](https://www.suse.com/releasenotes/x86_64/SUSE-SLES/15/#Intro.Module)。) + +舉例而言,如果要在 openSUSE Leap 15.2 上安裝 Node.js 14.x,請以 root 身分執行下列命令: + +```bash +zypper install nodejs14 +``` + +不同主要版本的 Node 可以同時安裝和使用。 + +## SmartOS 及 illumos + +SmartOS 映像預先安裝了 pkgsrc。在其他 illumos 發行版上,請先安裝 **[pkgsrc](https://pkgsrc.joyent.com/install-on-illumos/)**,然後才可以正常安裝二進制套件: + +```bash +pkgin -y install nodejs +``` + +或從 pkgsrc 自行編譯: + +```bash +cd pkgsrc/lang/nodejs && bmake install +``` + +## Snap + +[Node.js snaps](https://github.com/nodejs/snap) 在 Snap 商店中顯示為 [`node`](https://snapcraft.io/node)。 + +## Solus + +Solus 的主儲存庫有提供 Node.js。 + +```bash +sudo eopkg install nodejs +``` + +## vfox + +這是一款跨平台 (Windows、macOS、Linux) 的**可擴充的**版本管理器。 + +你可以**在不同的專案使用不同的版本**、**在不同的shell使用不同的版本**,也可以根據當下的目錄自動切換 Node 版本等。 + +它支援所有主流的 shell 指令 (Bash、Zsh、Fish、PowerShell、Clink、Cmder)。 + +請參閱[快速入門](https://vfox.lhan.me/guides/quick-start.html)瞭解 vfox 的所有使用細節。 + +## Void Linux + +Void Linux 在主儲存庫中提供了 Node.js 的穩定版本。 + +```bash +xbps-install -Sy nodejs +``` + +## Windows + +直接從 [nodejs.org](https://nodejs.org/) 網站下載 [Windows 安裝器](/#home-downloadhead)。 + +### 替代方案 + +使用 **[Winget](https://aka.ms/winget-cli)**: + +```bash +winget install OpenJS.NodeJS +# or for LTS +winget install OpenJS.NodeJS.LTS +``` + +執行上述的兩個命令之一後,可能需要重新啟動,這樣 `node` 的指令才能使用。 + +使用 **[Chocolatey](https://chocolatey.org/)**: + +```bash +cinst nodejs +# or for full install with npm +cinst nodejs.install +``` + +使用 **[Scoop](https://scoop.sh/)**: + +```bash +scoop install nodejs +# or for LTS +scoop install nodejs-lts +``` + +## z/OS + +IBM® SDK for Node.js - z/OS® 有兩種安裝格式可供選擇,分別是 +SMP/E 和 PAX。請選擇適合的安裝格式: + +- [在 z/OS 上安裝和設定 Node.js 的 SMP/E 版本](https://www.ibm.com/docs/en/sdk-nodejs-zos/14.0?topic=configuring-installing-smpe-edition) +- [在 z/OS 上安裝和設定 Node.js 的 PAX 版本](https://www.ibm.com/docs/en/sdk-nodejs-zos/14.0?topic=configuring-installing-pax-edition) diff --git a/apps/site/pages/zh-tw/download/package-manager/current.mdx b/apps/site/pages/zh-tw/download/package-manager/current.mdx new file mode 100644 index 0000000000000..4ff53d5b588ee --- /dev/null +++ b/apps/site/pages/zh-tw/download/package-manager/current.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+在 上使用 安裝 版本的 Node.js + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄 + +閱讀此版本的部落格文章 + +瞭解如何驗證已簽署的 SHASUMS + +查看其他社群支援的套件管理器 + +
diff --git a/apps/site/pages/zh-tw/download/package-manager/index.mdx b/apps/site/pages/zh-tw/download/package-manager/index.mdx new file mode 100644 index 0000000000000..4ff53d5b588ee --- /dev/null +++ b/apps/site/pages/zh-tw/download/package-manager/index.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+在 上使用 安裝 版本的 Node.js + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄 + +閱讀此版本的部落格文章 + +瞭解如何驗證已簽署的 SHASUMS + +查看其他社群支援的套件管理器 + +
diff --git a/apps/site/pages/zh-tw/download/prebuilt-binaries/current.mdx b/apps/site/pages/zh-tw/download/prebuilt-binaries/current.mdx new file mode 100644 index 0000000000000..1889a774bc4fc --- /dev/null +++ b/apps/site/pages/zh-tw/download/prebuilt-binaries/current.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+我想要 版本的 Node.js,執行系統為 。 + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄 + +閱讀此版本的部落格文章 + +瞭解如何驗證已簽署的 SHASUMS + +查看其他平台的每日預建構二進制文件或非官方建構版本 + +
diff --git a/apps/site/pages/zh-tw/download/prebuilt-binaries/index.mdx b/apps/site/pages/zh-tw/download/prebuilt-binaries/index.mdx new file mode 100644 index 0000000000000..2a208b48376ea --- /dev/null +++ b/apps/site/pages/zh-tw/download/prebuilt-binaries/index.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+我想要 版本的 Node.js,執行系統為 。 + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄. + +閱讀此版本的部落格文章。 + +瞭解如何驗證已簽署的 SHASUMS。 + +查看其他平台的每日預建構二進制檔案、所有版本建建構二進制檔案或非官方建構檔案。 + +
diff --git a/apps/site/pages/zh-tw/download/prebuilt-installer/current.mdx b/apps/site/pages/zh-tw/download/prebuilt-installer/current.mdx new file mode 100644 index 0000000000000..3093a495af0a7 --- /dev/null +++ b/apps/site/pages/zh-tw/download/prebuilt-installer/current.mdx @@ -0,0 +1,26 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+我想要 版本的 Node.js,執行系統為 。 + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄 + +閱讀此版本的部落格文章 + +瞭解如何驗證已簽署的 SHASUMS + +查看所有 Node.js 的下載選項 + +檢視 Node.js 版本清單 + +
diff --git a/apps/site/pages/zh-tw/download/prebuilt-installer/index.mdx b/apps/site/pages/zh-tw/download/prebuilt-installer/index.mdx new file mode 100644 index 0000000000000..3093a495af0a7 --- /dev/null +++ b/apps/site/pages/zh-tw/download/prebuilt-installer/index.mdx @@ -0,0 +1,26 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+我想要 版本的 Node.js,執行系統為 。 + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄 + +閱讀此版本的部落格文章 + +瞭解如何驗證已簽署的 SHASUMS + +查看所有 Node.js 的下載選項 + +檢視 Node.js 版本清單 + +
diff --git a/apps/site/pages/zh-tw/download/source-code/current.mdx b/apps/site/pages/zh-tw/download/source-code/current.mdx new file mode 100644 index 0000000000000..66421f326582c --- /dev/null +++ b/apps/site/pages/zh-tw/download/source-code/current.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+我想要 Node.js 版本的原始碼。 + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄 + +閱讀此版本的部落格文章 + +瞭解如何驗證已簽署的 SHASUMS + +探索如何從原始碼建構 Node.js + +
diff --git a/apps/site/pages/zh-tw/download/source-code/index.mdx b/apps/site/pages/zh-tw/download/source-code/index.mdx new file mode 100644 index 0000000000000..66421f326582c --- /dev/null +++ b/apps/site/pages/zh-tw/download/source-code/index.mdx @@ -0,0 +1,24 @@ +--- +layout: download +title: 下載 Node.js® +subtitle: 使用偏好的管道下載 Node.js +--- + +
+我想要 Node.js 版本的原始碼。 + + +
+ +
+Node.js 內含 。 + +閱讀此版本的更新紀錄 + +閱讀此版本的部落格文章 + +瞭解如何驗證已簽署的 SHASUMS + +探索如何從原始碼建構 Node.js + +
diff --git a/apps/site/pages/zh-tw/index.mdx b/apps/site/pages/zh-tw/index.mdx new file mode 100644 index 0000000000000..0a9fac05cf65a --- /dev/null +++ b/apps/site/pages/zh-tw/index.mdx @@ -0,0 +1,137 @@ +--- +title: 隨時隨地執行 JavaScript +layout: home +--- + +
+ + +
+

隨時隨地執行 JavaScript

+ +Node.js® 是一款免費的跨平台開源 JavaScript 執行環境,供開發者建立伺服器、網頁應用程式、命令列工具與腳本。 + +
+ +
+ + {({ release }) => ( + <> + 下載 Node.js (LTS) + + 下載享有長期支援功能的 Node.js {release.versionWithPrefix} + 1。 + Node.js 也可以透過 套件管理器 安裝。 + + + )} + + + + {({ release }) => ( + + 想要更快體驗新功能嗎? + 那就下載 Node.js {release.versionWithPrefix} + 1 吧。 + + )} + +
+
+ +
+
+ ```js displayName="Create an HTTP Server" + // server.mjs + import { createServer } from 'node:http'; + +const server = createServer((req, res) => { +res.writeHead(200, { 'Content-Type': 'text/plain' }); +res.end('Hello World!\n'); +}); + +// starts a simple http server locally on port 3000 +server.listen(3000, '127.0.0.1', () => { +console.log('Listening on 127.0.0.1:3000'); +}); + +// run with `node server.mjs` + +```` + +```js displayName="Write Tests" +// tests.mjs +import assert from 'node:assert'; +import test from 'node:test'; + +test('that 1 is equal 1', () => { + assert.strictEqual(1, 1); +}); + +test('that throws as 1 is not equal 2', () => { + // throws an exception because 1 != 2 + assert.strictEqual(1, 2); +}); + +// run with `node tests.mjs` +```` + +```js displayName="Read and Hash a File" +// crypto.mjs +import { createHash } from 'node:crypto'; +import { readFile } from 'node:fs/promises'; + +const hasher = createHash('sha1'); + +hasher.setEncoding('hex'); +// ensure you have a `package.json` file for this test! +hasher.write(await readFile('package.json')); +hasher.end(); + +const fileHash = hasher.read(); + +// run with `node crypto.mjs` +``` + +```js displayName="Streams Pipeline" +// streams.mjs +import { pipeline } from 'node:stream/promises'; +import { createReadStream, createWriteStream } from 'node:fs'; +import { createGzip } from 'node:zlib'; + +// ensure you have a `package.json` file for this test! +await pipeline( + createReadStream('package.json'), + createGzip(), + createWriteStream('package.json.gz') +); + +// run with `node streams.mjs` +``` + +```js displayName="Work with Threads" +// threads.mjs +import { + Worker, + isMainThread, + workerData, + parentPort, +} from 'node:worker_threads'; + +if (isMainThread) { + const data = 'some data'; + const worker = new Worker(import.meta.filename, { workerData: data }); + worker.on('message', msg => console.log('Reply from Thread:', msg)); +} else { + const source = workerData; + parentPort.postMessage(btoa(source.toUpperCase())); +} + +// run with `node threads.mjs` +``` + +
+ +我們提供大量[學習資源](/learn),探索 Node.js 的無限潛能。 + +
diff --git a/apps/site/pages/zh-tw/search.mdx b/apps/site/pages/zh-tw/search.mdx new file mode 100644 index 0000000000000..d484b08ae27f5 --- /dev/null +++ b/apps/site/pages/zh-tw/search.mdx @@ -0,0 +1,6 @@ +--- +layout: search +title: 搜尋結果 +--- + + diff --git a/apps/site/util/getNodeDownloadSnippet.ts b/apps/site/util/getNodeDownloadSnippet.ts index a509ebcc558aa..b1874f6084c5b 100644 --- a/apps/site/util/getNodeDownloadSnippet.ts +++ b/apps/site/util/getNodeDownloadSnippet.ts @@ -39,7 +39,7 @@ export const getNodeDownloadSnippet = ( if (os === 'MAC' || os === 'LINUX') { snippets.NVM = dedent` # ${t('layouts.download.codeBox.installsNvm')} - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash # ${t('layouts.download.codeBox.downloadAndInstallNodejsRestartTerminal')} nvm install ${release.major}