urlImports

Les importations depuis des URL sont une fonctionnalité expérimentale qui vous permet d'importer des modules directement depuis des serveurs externes (au lieu du disque local).

Avertissement : N'utilisez que des domaines de confiance pour télécharger et exécuter du code sur votre machine. Veuillez faire preuve de discernement et de prudence jusqu'à ce que cette fonctionnalité soit marquée comme stable.

Pour l'activer, ajoutez les préfixes d'URL autorisés dans next.config.js :

next.config.js
module.exports = {
  experimental: {
    urlImports: ['https://example.com/assets/', 'https://cdn.skypack.dev'],
  },
}

Ensuite, vous pouvez importer des modules directement depuis des URL :

import { a, b, c } from 'https://example.com/assets/some/module.js'

Les importations depuis des URL peuvent être utilisées partout où les imports normaux de packages sont possibles.

Modèle de sécurité

Cette fonctionnalité est conçue avec la sécurité comme priorité absolue. Pour commencer, nous avons ajouté un drapeau expérimental vous forçant à autoriser explicitement les domaines depuis lesquels vous acceptez les importations. Nous travaillons à aller plus loin en limitant les importations depuis des URL à une exécution dans le bac à sable du navigateur en utilisant le Edge Runtime.

Fichier de verrouillage (Lockfile)

Lorsque vous utilisez des importations depuis des URL, Next.js crée un répertoire next.lock contenant un fichier de verrouillage et les ressources téléchargées. Ce répertoire doit être commité dans Git, et ne doit pas être ignoré par .gitignore.

  • Lors de l'exécution de next dev, Next.js téléchargera et ajoutera toutes les nouvelles importations depuis des URL à votre fichier de verrouillage.
  • Lors de l'exécution de next build, Next.js utilisera uniquement le fichier de verrouillage pour construire l'application en production.

Généralement, aucune requête réseau n'est nécessaire et tout fichier de verrouillage obsolète fera échouer la construction. Une exception concerne les ressources qui répondent avec Cache-Control: no-cache. Ces ressources auront une entrée no-cache dans le fichier de verrouillage et seront toujours récupérées depuis le réseau à chaque construction.

Exemples

Skypack

import confetti from 'https://cdn.skypack.dev/canvas-confetti'
import { useEffect } from 'react'

export default () => {
  useEffect(() => {
    confetti()
  })
  return <p>Bonjour</p>
}

Importation d'images statiques

import Image from 'next/image'
import logo from 'https://example.com/assets/logo.png'

export default () => (
  <div>
    <Image src={logo} placeholder="blur" />
  </div>
)

URL dans CSS

.className {
  background: url('https://example.com/assets/hero.jpg');
}

Importation de ressources

const logo = new URL('https://example.com/assets/file.txt', import.meta.url)

console.log(logo.pathname)

// affiche "/_next/static/media/file.a9727b5d.txt"

On this page