Versión 11
Para actualizar a la versión 11, ejecute el siguiente comando:
npm install next@11
yarn add next@11
Webpack 5
Webpack 5 es ahora el predeterminado para todas las aplicaciones de Next.js. Si no tenía una configuración personalizada de webpack, su aplicación ya está usando webpack 5. Si tiene una configuración personalizada de webpack, puede consultar la documentación de webpack 5 en Next.js para obtener orientación sobre la actualización.
Limpieza de distDir
ahora es predeterminada
El directorio de salida de compilación (predeterminado a .next
) ahora se limpia por defecto, excepto por las cachés de Next.js. Puede consultar el RFC de limpieza de distDir
para obtener más información.
Si su aplicación dependía de este comportamiento anteriormente, puede deshabilitar el nuevo comportamiento predeterminado agregando la bandera cleanDistDir: false
en next.config.js
.
PORT
ahora es compatible con next dev
y next start
Next.js 11 admite la variable de entorno PORT
para establecer el puerto en el que se ejecuta la aplicación. Todavía se recomienda usar -p
/--port
, pero si tenía alguna restricción para usar -p
, ahora puede usar PORT
como alternativa:
Ejemplo:
PORT=4000 next start
Personalización de next.config.js
para importar imágenes
Next.js 11 admite importaciones estáticas de imágenes con next/image
. Esta nueva característica depende de la capacidad de procesar importaciones de imágenes. Si anteriormente agregó los paquetes next-images
o next-optimized-images
, puede migrar al nuevo soporte integrado usando next/image
o deshabilitar la característica:
module.exports = {
images: {
disableStaticImages: true,
},
}
Eliminar super.componentDidCatch()
de pages/_app.js
El método componentDidCatch
de next/app
fue obsoleto en Next.js 9 ya que ya no es necesario y desde entonces no tiene efecto. En Next.js 11, fue eliminado.
Si su pages/_app.js
tiene un método personalizado componentDidCatch
, puede eliminar super.componentDidCatch
ya que ya no es necesario.
Eliminar Container
de pages/_app.js
Esta exportación fue obsoleta en Next.js 9 ya que ya no es necesaria y desde entonces no tiene efecto, mostrando una advertencia durante el desarrollo. En Next.js 11 fue eliminada.
Si su pages/_app.js
importa Container
desde next/app
, puede eliminarlo ya que fue removido. Aprenda más en la documentación.
Eliminar el uso de props.url
en componentes de página
Esta propiedad fue obsoleta en Next.js 4 y desde entonces mostraba una advertencia durante el desarrollo. Con la introducción de getStaticProps
/ getServerSideProps
, estos métodos ya no permitían el uso de props.url
. En Next.js 11, fue eliminada completamente.
Puede aprender más en la documentación.
Eliminar la propiedad unsized
en next/image
La propiedad unsized
en next/image
fue obsoleta en Next.js 10.0.1. Puede usar layout="fill"
en su lugar. En Next.js 11, unsized
fue eliminada.
Eliminar la propiedad modules
en next/dynamic
Las opciones modules
y render
para next/dynamic
fueron obsoletas en Next.js 9.5. Esto se hizo para que la API de next/dynamic
fuera más similar a React.lazy
. En Next.js 11, las opciones modules
y render
fueron eliminadas.
Esta opción no se mencionaba en la documentación desde Next.js 8, por lo que es poco probable que su aplicación la esté usando.
Si su aplicación usa modules
y render
, puede consultar la documentación.
Eliminar Head.rewind
Head.rewind
no ha tenido efecto desde Next.js 9.5, en Next.js 11 fue eliminado. Puede eliminar de forma segura su uso de Head.rewind
.
Locales de Moment.js excluidos por defecto
Moment.js incluye traducciones para muchos locales por defecto. Next.js ahora excluye automáticamente estos locales por defecto para optimizar el tamaño del paquete en aplicaciones que usan Moment.js.
Para cargar un locale específico, use este fragmento:
import moment from 'moment'
import 'moment/locale/ja'
moment.locale('ja')
Puede optar por no usar este nuevo comportamiento predeterminado agregando excludeDefaultMomentLocales: false
a next.config.js
si no desea el nuevo comportamiento, pero tenga en cuenta que se recomienda encarecidamente no deshabilitar esta optimización ya que reduce significativamente el tamaño de Moment.js.
Actualizar el uso de router.events
En caso de que esté accediendo a router.events
durante el renderizado, en Next.js 11 router.events
ya no se proporciona durante la pre-renderización. Asegúrese de acceder a router.events
en useEffect
:
useEffect(() => {
const handleRouteChange = (url, { shallow }) => {
console.log(
`La aplicación está cambiando a ${url} ${
shallow ? 'con' : 'sin'
} enrutamiento superficial`
)
}
router.events.on('routeChangeStart', handleRouteChange)
// Si el componente se desmonta, cancela la suscripción
// del evento con el método 'off':
return () => {
router.events.off('routeChangeStart', handleRouteChange)
}
}, [router])
Si su aplicación usa router.router.events
, que era una propiedad interna no pública, asegúrese de usar router.events
también.
React 16 a 17
React 17 introdujo una nueva Transformación JSX que lleva una característica de larga data de Next.js a todo el ecosistema React: No tener que hacer import React from 'react'
cuando se usa JSX. Cuando se usa React 17, Next.js usará automáticamente la nueva transformación. Esta transformación no hace que la variable React
sea global, lo cual era un efecto secundario no intencional de la implementación anterior de Next.js. Hay un codemod disponible para corregir automáticamente los casos en los que accidentalmente usó React
sin importarlo.
La mayoría de las aplicaciones ya usan la última versión de React. Con Next.js 11, la versión mínima de React se ha actualizado a 17.0.2.
Para actualizar, puede ejecutar el siguiente comando:
npm install react@latest react-dom@latest
O usando yarn
:
yarn add react@latest react-dom@latest