diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index f76b0b416163..85feefc08f47 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM node:lts@sha256:5c76d05034644fa8ecc9c2aa84e0a83cd981d0ef13af5455b87b9adf5b216561 +FROM node:lts@sha256:35a5dd72bcac4bce43266408b58a02be6ff0b6098ffa6f5435aeea980a8951d7 RUN apt-get update && \ apt-get install -fy libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdbus-1-3 libdrm2 libxkbcommon0 libatspi2.0-0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2 && \ diff --git a/.github/issue-up.yml b/.github/issue-up.yml deleted file mode 100644 index bdb92c0608e7..000000000000 --- a/.github/issue-up.yml +++ /dev/null @@ -1,5 +0,0 @@ -# https://github.com/antfu/issue-up -upstream: - nitro: unjs/nitro - unimport: unjs/unimport - untyped: unjs/untyped diff --git a/.github/workflows/autofix-docs.yml b/.github/workflows/autofix-docs.yml index b4ed01816e8b..221468868aa7 100644 --- a/.github/workflows/autofix-docs.yml +++ b/.github/workflows/autofix-docs.yml @@ -1,4 +1,4 @@ -name: autofix.ci # needed to securely identify the workflow +name: autofix.ci # needed to securely identify the workflow on: pull_request: @@ -21,7 +21,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml index 4f65e10c0d3e..ef7cffdf16e6 100644 --- a/.github/workflows/autofix.yml +++ b/.github/workflows/autofix.yml @@ -1,4 +1,4 @@ -name: autofix.ci # needed to securely identify the workflow +name: autofix.ci # needed to securely identify the workflow on: pull_request: @@ -17,12 +17,15 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies run: pnpm install + - name: Check engine ranges, peer dependency ranges and installed versions + run: pnpm installed-check -d --fix + - name: Build (stub) run: pnpm dev:prepare diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index ccbf0feaeead..3fe89901fd67 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -33,7 +33,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index e66a5f6fe612..23f47acac045 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -28,7 +28,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d211a26b113..5fe677252438 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,6 +56,9 @@ jobs: - name: Build run: pnpm build + - name: Check types + run: pnpm test:attw + - name: Cache dist uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: @@ -75,7 +78,7 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Initialize CodeQL - uses: github/codeql-action/init@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: config: | paths: @@ -91,7 +94,7 @@ jobs: queries: +security-and-quality - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: category: "/language:javascript-typescript" @@ -111,7 +114,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies @@ -142,7 +145,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies @@ -166,7 +169,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies @@ -248,7 +251,7 @@ jobs: TEST_PAYLOAD: ${{ matrix.payload }} SKIP_BUNDLE_SIZE: ${{ github.event_name != 'push' || matrix.env == 'dev' || matrix.builder == 'webpack' || matrix.context == 'default' || matrix.payload == 'js' || runner.os == 'Windows' }} - - uses: codecov/codecov-action@015f24e6818733317a2da2edd6290ab26238649a # v5.0.7 + - uses: codecov/codecov-action@7f8b4b4bde536c465e797be725718b88c5d95e0e # v5.1.1 if: github.event_name != 'push' && matrix.env == 'built' && matrix.builder == 'vite' && matrix.context == 'default' && matrix.os == 'ubuntu-latest' && matrix.manifest == 'manifest-on' with: token: ${{ secrets.CODECOV_TOKEN }} @@ -277,7 +280,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies @@ -318,7 +321,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/docs-check-links.yml b/.github/workflows/docs-check-links.yml index 5db033fd3743..18aa5cbec05b 100644 --- a/.github/workflows/docs-check-links.yml +++ b/.github/workflows/docs-check-links.yml @@ -19,7 +19,7 @@ jobs: steps: # Cache lychee results (e.g. to avoid hitting rate limits) - name: Restore lychee cache - uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: .lycheecache key: cache-lychee-${{ github.sha }} @@ -33,14 +33,14 @@ jobs: with: # arguments with file types to check args: >- - --cache - --verbose - --no-progress - --max-cache-age=1d - './**/*.md' - './**/*.html' + '-c=lychee.toml' + './docs/**/*.md' + './docs/**/*.html' + './packages/*/src/**/*.ts' + './packages/*/src/**/*.js' + './packages/*/src/**/*.md' # fail the action on broken links fail: true env: # to be used in case rate limits are surpassed - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 4353c01c5950..342573e56479 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -25,7 +25,7 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies diff --git a/.github/workflows/lint-sherif.yml b/.github/workflows/lint-monorepo.yml similarity index 77% rename from .github/workflows/lint-sherif.yml rename to .github/workflows/lint-monorepo.yml index 1477d94c3b4a..3e7930da4b81 100644 --- a/.github/workflows/lint-sherif.yml +++ b/.github/workflows/lint-monorepo.yml @@ -4,12 +4,14 @@ on: push: paths: - "**/package.json" + - "pnpm-lock.yaml" branches: - main - 3.x pull_request: paths: - "**/package.json" + - "pnpm-lock.yaml" branches: - main - 3.x @@ -27,10 +29,14 @@ jobs: - run: corepack enable - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: - node-version: 20 + node-version: 22 cache: "pnpm" - name: Install dependencies run: pnpm install + - name: Lint monorepo run: pnpm sherif -r multiple-dependency-versions + + - name: Check engine ranges, peer dependency ranges and installed versions + run: pnpm installed-check -d diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index bde3ab95ac29..9ad2ff9e1a3a 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -68,7 +68,7 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 if: github.repository == 'nuxt/nuxt' && success() with: sarif_file: results.sarif diff --git a/docs/1.getting-started/1.introduction.md b/docs/1.getting-started/1.introduction.md index ace1e3b37a76..612dc166308b 100644 --- a/docs/1.getting-started/1.introduction.md +++ b/docs/1.getting-started/1.introduction.md @@ -25,7 +25,7 @@ Nuxt использует соглашения и продуманную стр - **Автоматические импорты:** Пишите Vue композаблы и компоненты в соответствующих каталогах и используйте их без необходимости импорта, с преимуществами tree-shaking и оптимизированных JS-пакетов. - **Data-fetching утилиты:** Nuxt предоставляет композаблы для SSR-совместимого получения данных, а также различные стратегии для этого. - **Поддержка TypeScript без настройки:** пишите type-safe код без необходимости изучать TypeScript с нашими автоматически сгенерированными типами и `tsconfig.json` -- **Настроенные инструменты сборки:** мы используем [Vite](https://vitejs.dev) по умолчанию для поддержки горячей заменой модулей (HMR) во время разработки и сборки вашего кода для продакшена с использованием лучших практик. +- **Настроенные инструменты сборки:** мы используем [Vite](https://vite.dev) по умолчанию для поддержки горячей заменой модулей (HMR) во время разработки и сборки вашего кода для продакшена с использованием лучших практик. Nuxt заботится обо всем этом и предоставляет как frontend, так и backend-функциональность, чтобы вы могли сфокусироваться на важном: **создании своего веб-приложения**. @@ -74,7 +74,7 @@ Nuxt состоит из различных [core-пакетов](https://github - Основной движок: [nuxt](https://github.com/nuxt/nuxt/tree/main/packages/nuxt) - Сборщики: [@nuxt/vite-builder](https://github.com/nuxt/nuxt/tree/main/packages/vite) и [@nuxt/webpack-builder](https://github.com/nuxt/nuxt/tree/main/packages/webpack) - Интерфейс командной строки: [nuxi](https://github.com/nuxt/nuxt/tree/main/packages/nuxi) -- Серверный движок: [nitro](https://github.com/unjs/nitro) +- Серверный движок: [nitro](https://github.com/nitrojs/nitro) - Development kit: [@nuxt/kit](https://github.com/nuxt/nuxt/tree/main/packages/kit) Мы рекомендуем прочитать каждую концепцию, чтобы иметь полное представление о возможностях Nuxt и области действия каждого пакета. diff --git a/docs/1.getting-started/12.upgrade.md b/docs/1.getting-started/12.upgrade.md index 74ea6565f465..d0a8abc0d185 100644 --- a/docs/1.getting-started/12.upgrade.md +++ b/docs/1.getting-started/12.upgrade.md @@ -42,7 +42,7 @@ bun x nuxi upgrade ## Тестируем Nuxt 4 -Дата выхода Nuxt 4 будет объявлена позднее. Она зависит от наличия достаточного времени после основного релиза Nitro для тщательного тестирования сообществом. Вы можете следить за прогрессом выхода Nitro в [этом PR](https://github.com/unjs/nitro/pull/2521). +Дата выхода Nuxt 4 будет объявлена позднее. Она зависит от наличия достаточного времени после основного релиза Nitro для тщательного тестирования сообществом. Вы можете следить за прогрессом выхода Nitro в [этом PR](https://github.com/nitrojs/nitro/pull/2521). До выхода Nuxt 4 многие критические изменения, которые войдут в Nuxt 4, уже можно протестировать в версиях Nuxt 3.12 и выше. @@ -73,7 +73,8 @@ export default defineNuxtConfig({ // resetAsyncDataToUndefined: true, // templateUtils: true, // relativeWatchPaths: true, - // normalizeComponentNames: false + // normalizeComponentNames: false, + // spaLoadingTemplateLocation: 'within', // defaults: { // useAsyncData: { // deep: true @@ -236,6 +237,45 @@ export default defineNuxtConfig({ }) ``` +#### New DOM Location for SPA Loading Screen + +🚦 **Impact Level**: Minimal + +##### What Changed + +When rendering a client-only page (with `ssr: false`), we optionally render a loading screen (from `app/spa-loading-template.html`), within the Nuxt app root: + +```html +
+ +
+``` + +Now, we default to rendering the template alongside the Nuxt app root: + +```html +
+ +``` + +##### Reasons for Change + +This allows the spa loading template to remain in the DOM until the Vue app suspense resolves, preventing a flash of white. + +##### Migration Steps + +If you were targeting the spa loading template with CSS or `document.queryElement` you will need to update your selectors. For this purpose you can use the new `app.spaLoaderTag` and `app.spaLoaderAttrs` configuration options. + +Alternatively, you can revert to the previous behaviour with: + +```ts twoslash [nuxt.config.ts] +export default defineNuxtConfig({ + experimental: { + spaLoadingTemplateLocation: 'within', + } +}) +``` + #### Scan Page Meta After Resolution 🚦 **Impact Level**: Minimal diff --git a/docs/1.getting-started/2.installation.md b/docs/1.getting-started/2.installation.md index e1c395b959e6..4fc2a17faae2 100644 --- a/docs/1.getting-started/2.installation.md +++ b/docs/1.getting-started/2.installation.md @@ -91,6 +91,9 @@ pnpm dev -o ```bash [bun] bun run dev -o + +# To use the Bun runtime during development +# bun --bun run dev -o ``` :: diff --git a/docs/1.getting-started/3.configuration.md b/docs/1.getting-started/3.configuration.md index 0bbd369f9363..49ecd675130e 100644 --- a/docs/1.getting-started/3.configuration.md +++ b/docs/1.getting-started/3.configuration.md @@ -153,7 +153,7 @@ Nuxt использует файл [`nuxt.config.ts`](/docs/guide/directory-stru ----------------------------------|-------------------------|------------------------------------------------------------------------------ [Nitro](https://nitro.unjs.io) | ~~`nitro.config.ts`~~ | Используйте ключ [`nitro`](/docs/api/nuxt-config#nitro) в `nuxt.config` [PostCSS](https://postcss.org) | ~~`postcss.config.js`~~ | Используйте ключ [`postcss`](/docs/api/nuxt-config#postcss) в `nuxt.config` -[Vite](https://vitejs.dev) | ~~`vite.config.ts`~~ | Используйте ключ [`vite`](/docs/api/nuxt-config#vite) в `nuxt.config` +[Vite](https://vite.dev) | ~~`vite.config.ts`~~ | Используйте ключ [`vite`](/docs/api/nuxt-config#vite) в `nuxt.config` [webpack](https://webpack.js.org) | ~~`webpack.config.ts`~~ | Используйте ключ [`webpack`](/docs/api/nuxt-config#webpack-1) в `nuxt.config` Вот список других распространенных конфигурационных файлов: diff --git a/docs/1.getting-started/4.assets.md b/docs/1.getting-started/4.assets.md index 2380caa36807..bf0875044f85 100644 --- a/docs/1.getting-started/4.assets.md +++ b/docs/1.getting-started/4.assets.md @@ -27,7 +27,7 @@ Nuxt использует две директории для обработки ## Директория Assets -Nuxt использует [Vite](https://vitejs.dev/guide/assets.html) (по умолчанию) или [webpack](https://webpack.js.org/guides/asset-management) для сборки и упаковки приложения. Основная функция этих инструментов сборки - обработка файлов JavaScript, но они могут быть расширены с помощью [плагинов](https://vitejs.dev/plugins) (для Vite) или [загрузчиков](https://webpack.js.org/loaders) (для webpack) для обработки других видов ресурсов, таких как таблицы стилей, шрифты или SVG. На этом этапе исходный файл преобразуется (в основном) для повышения производительности или кэширования (например, для минимизации таблиц стилей или инвалидации кэша браузера). +Nuxt использует [Vite](https://vite.dev/guide/assets.html) (по умолчанию) или [webpack](https://webpack.js.org/guides/asset-management) для сборки и упаковки приложения. Основная функция этих инструментов сборки - обработка файлов JavaScript, но они могут быть расширены с помощью [плагинов](https://vitejs.dev/plugins) (для Vite) или [загрузчиков](https://webpack.js.org/loaders) (для webpack) для обработки других видов ресурсов, таких как таблицы стилей, шрифты или SVG. На этом этапе исходный файл преобразуется (в основном) для повышения производительности или кэширования (например, для минимизации таблиц стилей или инвалидации кэша браузера). По соглашению, Nuxt использует директорию [`assets/`](/docs/guide/directory-structure/assets) для хранения этих файлов, но для этого каталога нет функции автоматического сканирования, и вы можете использовать для него любое другое имя. diff --git a/docs/1.getting-started/4.styling.md b/docs/1.getting-started/4.styling.md index 091a55841548..84dc023abe8e 100644 --- a/docs/1.getting-started/4.styling.md +++ b/docs/1.getting-started/4.styling.md @@ -204,7 +204,7 @@ export default defineNuxtConfig({ В обоих случаях скомпилированные таблицы стилей будут встроены в HTML-код, отрисованный Nuxt. :: -Если вам необходимо внедрить код в предварительно обработанные файлы, такие как [sass-фрагменты](https://sass-lang.com/documentation/at-rules/use#partials) с переменными цветов, вы можете сделать это с помощью [параметров препроцессоров](https://vitejs.dev/config/shared-options.html#css-preprocessoroptions) Vite. +Если вам необходимо внедрить код в предварительно обработанные файлы, такие как [sass-фрагменты](https://sass-lang.com/documentation/at-rules/use#partials) с переменными цветов, вы можете сделать это с помощью [параметров препроцессоров](https://vite.dev/config/shared-options.html#css-preprocessoroptions) Vite. Создайте несколько фрагментов (partials) в директории `assets`: @@ -258,6 +258,27 @@ export default defineNuxtConfig({ Nuxt использует Vite по умолчанию. Если вы хотите использовать вместо этого webpack, обратитесь к [документации](https://webpack.js.org/loaders/sass-loader) загрузчика нужного препроцессора. +### Preprocessor Workers (Experimental) + +Vite has made available an [experimental option](https://vite.dev/config/shared-options.html#css-preprocessormaxworkers) which can speed up using preprocessors. + +You can enable this in your `nuxt.config`: + +```ts + +export default defineNuxtConfig({ + vite: { + css: { + preprocessorMaxWorkers: true // number of CPUs minus 1 + } + } +}) +``` + +::note +This is an experimental option and you should refer to the Vite documentation and [provide feedback](https://github.com/vitejs/vite/discussions/15835). +:: + ## Стилизация однофайловых компонентов (SFC) Одной из лучших особенностей Vue и SFC является то, насколько они хороши в работе со стилями. Вы можете напрямую писать CSS или код препроцессора в блоке стилей компонента, поэтому у вас будет фантастический опыт разработчика без необходимости использовать что-то вроде CSS-in-JS. Однако, если вы хотите использовать CSS-in-JS, вы можете найти сторонние библиотеки и модули, которые его поддерживают, например [pinceau](https://github.com/Tahul/pinceau). @@ -416,7 +437,7 @@ const color = ref("red") :: -Вы можете обратиться к [документации Vite CSS](https://vitejs.dev/guide/features.html#css) и [документации @vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue). +Вы можете обратиться к [документации Vite CSS](https://vite.dev/guide/features.html#css) и [документации @vitejs/plugin-vue](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue). Для пользователей webpack обратитесь к [документации по загрузчику Vue](https://vue-loader.vuejs.org). ## Использование PostCSS diff --git a/docs/1.getting-started/8.server.md b/docs/1.getting-started/8.server.md index 49e41655f0af..3a5f374ef21a 100644 --- a/docs/1.getting-started/8.server.md +++ b/docs/1.getting-started/8.server.md @@ -10,7 +10,7 @@ navigation.icon: i-ph-computer-tower ![Серверный движок](/assets/docs/getting-started/server.svg) -Сервер Nuxt — [Nitro](https://github.com/unjs/nitro). Изначально он был создан для Nuxt, но теперь является частью [UnJS](https://unjs.io) и открыт для других фреймворков — и даже может использоваться сам по себе. +Сервер Nuxt — [Nitro](https://github.com/nitrojs/nitro). Изначально он был создан для Nuxt, но теперь является частью [UnJS](https://unjs.io) и открыт для других фреймворков — и даже может использоваться сам по себе. Использование Nitro дает Nuxt суперспособности: diff --git a/docs/2.guide/1.concepts/2.vuejs-development.md b/docs/2.guide/1.concepts/2.vuejs-development.md index 366cda5b917f..a95cbf65527b 100644 --- a/docs/2.guide/1.concepts/2.vuejs-development.md +++ b/docs/2.guide/1.concepts/2.vuejs-development.md @@ -21,7 +21,7 @@ Nuxt всегда использовал Vue в качестве фреймво ### Однофайловые компоненты -[Однофайловые компоненты Vue](https://ru.vuejs.org/guide/scaling-up/sfc.html) (SFC или `*.vue` файлы) инкапсулируют разметку (`