Spec-Zone.ru › Next.js

Вывод

Во время сборки Next.js автоматически отслеживает каждую страницу и ее зависимости, чтобы определить все файлы, необходимые для развертывания производственной версии вашего приложения.

Эта функция помогает значительно уменьшить размер развертываний. Раньше, при развертывании с Docker, вам необходимо было иметь все файлы из вашего пакета dependencies для запуска next start. Начиная с Next.js 12, вы можете использовать отслеживание файлов вывода в каталоге .next/, чтобы включить только необходимые файлы.

Кроме того, это устраняет необходимость использования устаревшего serverless целевого значения, которое может вызывать различные проблемы, а также создает ненужное дублирование.

Как это работает

Во время next build, Next.js будет использовать @vercel/nft, чтобы статически проанализировать import, require, и fs использование, чтобы определить все файлы, которые может загрузить страница.

Производственный сервер Next.js также отслеживается для необходимых файлов и выводится в .next/next-server.js.nft.json, что можно использовать в производстве.

Чтобы использовать файлы .nft.json, выпущенные в выходной каталог .next, вы можете прочитать список файлов в каждом трассировочном файле, относящихся к файлу .nft.json, и затем скопировать их в место развертывания.

Автоматическое копирование отслеженных файлов

Next.js может автоматически создать папку standalone, которая копирует только необходимые файлы для развертывания в производстве, включая выбранные файлы в node_modules.

Чтобы использовать эту автоматическую копию, вы можете включить ее в свой next.config.js:

module.exports = {
  output: 'standalone',
}

Это создаст папку в .next/standalone, которую можно развернуть самостоятельно без установки node_modules.

Кроме того, также выводится минимальный файл server.js, который можно использовать вместо next start. Этот минимальный сервер по умолчанию не копирует папки public и .next/static, так как их в идеале должен обрабатывать CDN, хотя эти папки можно скопировать в папки standalone/public и standalone/.next/static вручную, после чего файл server.js будет автоматически обслуживать их.

Важно знать:

  • next.config.js считывается во время next build и сериализуется в файл вывода server.js. Если используются устаревшие параметры serverRuntimeConfig или publicRuntimeConfig, значения будут специфичны для значений во время сборки.
  • Если ваш проект должен прослушивать определенный порт или хост, вы можете определить переменные среды PORT или HOSTNAME перед запуском server.js. Например, запустите PORT=8080 HOSTNAME=0.0.0.0 node server.js для запуска сервера на http://0.0.0.0:8080.
  • Если ваш проект использует Оптимизацию изображений с параметрами по умолчанию loader, вы должны установить sharp в качестве зависимости:
npm i sharp
yarn add sharp
pnpm add sharp
bun add sharp

Ограничения

  • При отслеживании в установках monorepo по умолчанию используется каталог проекта. Для next build packages/web-app, packages/web-app будет корнем отслеживания, и любые файлы за пределами этой папки не будут включены. Чтобы включить файлы за пределами этой папки, вы можете установить experimental.outputFileTracingRoot в своем next.config.js.
module.exports = {
  experimental: {
    // this includes files from the monorepo base two directories up
    outputFileTracingRoot: path.join(__dirname, '../../'),
  },
}
  • В некоторых случаях Next.js может не включить необходимые файлы или может неправильно включить неиспользуемые файлы. В таких случаях вы можете использовать experimental.outputFileTracingExcludes и experimental.outputFileTracingIncludes соответственно в next.config.js. Каждый конфигурационный файл принимает объект с minimatch globs для ключа, чтобы сопоставить определенные страницы, и значение массива с globs, относящимися к корню проекта, для включения или исключения в трассировке.
module.exports = {
  experimental: {
    outputFileTracingExcludes: {
      '/api/hello': ['./un-necessary-folder/**/*'],
    },
    outputFileTracingIncludes: {
      '/api/another': ['./necessary-folder/**/*'],
    },
  },
}
  • В настоящее время Next.js не выполняет никаких действий с выпущенными .nft.json файлами. Файлы должны быть прочитаны вашей платформой развертывания, например, Vercel, для создания минимального развертывания. В будущей версии запланирована новая команда для использования этих .nft.json файлов.

Экспериментальное turbotrace

Отслеживание зависимостей может быть медленным, так как требует очень сложных вычислений и анализа. Мы создали turbotrace на Rust в качестве более быстрого и интеллектуального альтернативного решения для реализации на JavaScript.

Чтобы включить его, вы можете добавить следующую конфигурацию в свой next.config.js:

module.exports = {
  experimental: {
    turbotrace: {
      // control the log level of the turbotrace, default is `error`
      logLevel?:
      | 'bug'
      | 'fatal'
      | 'error'
      | 'warning'
      | 'hint'
      | 'note'
      | 'suggestions'
      | 'info',
      // control if the log of turbotrace should contain the details of the analysis, default is `false`
      logDetail?: boolean
      // show all log messages without limit
      // turbotrace only show 1 log message for each categories by default
      logAll?: boolean
      // control the context directory of the turbotrace
      // files outside of the context directory will not be traced
      // set the `experimental.outputFileTracingRoot` has the same effect
      // if the `experimental.outputFileTracingRoot` and this option are both set, the `experimental.turbotrace.contextDirectory` will be used
      contextDirectory?: string
      // if there is `process.cwd()` expression in your code, you can set this option to tell `turbotrace` the value of `process.cwd()` while tracing.
      // for example the require(process.cwd() + '/package.json') will be traced as require('/path/to/cwd/package.json')
      processCwd?: string
      // control the maximum memory usage of the `turbotrace`, in `MB`, default is `6000`.
      memoryLimit?: number
    },
  },
}

© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/pages/api-reference/next-config-js/output

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API