50
votes

Module introuvable: Impossible de résoudre «FS» dans l'application Next.js

Impossible d'identifier ce qui se passe dans mon application Next.js. Comme fs est un module de système de fichiers par défaut de NodeJS. Il donne l'erreur du module introuvable .

 Entrez la description de l'image ici

 Entrez la description de l'image ici


4 commentaires

Essayez un nouveau npm install après avoir supprimé le dossier node_modules


Comme l'a dit @ajitzero, ce serait le problème. Vous pouvez également supprimer package-lock.json et exécuter npm cache clean puis npm install


J'ai supprimé Node_Modules et Package-Lock.json puis NPM Cache Clean et NPM Install ... mais la même erreur apparaît toujours.


Vous ne pouvez pas utiliser le module FS dans le navigateur, c'est un module NodeJS.


13 Réponses :


3
votes

Il se peut que le module que vous essayez d'implémenter n'est pas censé s'exécuter dans un navigateur. C'est à dire. il est uniquement côté serveur.


3 commentaires

Pourquoi est-ce une réponse vérifiée alors que ce n'est même pas une réponse?


@asma Tout d'abord, il n'y a rien de tel qu'une "réponse vérifiée" ici sur StackOverflow. Deuxièmement, le PO avait accepté cette réponse et non celle d'Arjunkava parce que ce dernier a été affiché 6 mois après avoir posé la question, et ne se souciait pas de l'accepter un meilleur depuis. De plus, il s'agit d'un raisonnement parfaitement valable. Les packages du serveur seuls peuvent provoquer de tels problèmes s'ils sont utilisés dans le code côté client. PS: Après la mise à jour des réponses obsolètes, cette réponse n'est plus épinglée pour être en tête, donc ce ne devrait pas être un problème car c'est la réponse qui a aidé à OP quand ils avaient besoin, et c'est donc celui accepté.


@Asma Il fournit une réponse au problème et a été accepté par l'OP. Cela peut ne pas entrer dans une solution en détail comme la réponse de Yilmaz, mais il n'y a rien de mal du tout. "Les réponses vérifiées" ne sont pas une chose, l'OP accepte la réponse qui a fonctionné pour eux.



8
votes

fs , path ou d'autres modules natifs de nœud ne peuvent être utilisés que dans le code côté serveur, comme les fonctions "getServerside". Si vous essayez de l'utiliser dans le client, vous obtenez une erreur même, vous vous consolez simplement. , next.js est suffisamment intelligent pour voir que vous l'utilisez dans le côté du serveur, il n'ajoutait donc pas cette importation dans le bundle client

l'un des packages que j'ai utilisés me donnait cette erreur, j'ai corrigé ceci Avec

if (typeof window !== "undefined") {
  window.TruffleContract = contract;
}

mais cela a lancé un avertissement sur le terminal:

export default function BaseLayout({children}) {
  return (
    <>
      <Script
        // this in public folder
        src="/js/myPackage.js"
        // this means this script will be loaded first
        strategy="beforeInteractive"
      />
    </>
  )
}

puis j'ai essayé de charger le module de nœud sur le navigateur . J'ai copié le "min.js" du module de nœud du node_modules et placé dans "public / js / mypackage.js" et le charger avec le script

"Critical dependency: require function is used in a way in which

 dependencies cannot be statically extracted"

Ce package était Jugé à Fenêtre Objet et dans Node_Modules Source Code's Index.js:

module.exports = {
 
  webpack: (config, { isServer }) => {
    if (!isServer) {
      config.resolve.fallback.fs = false
    }

    return config
  },
  
}

afin que je puisse accéder à ce script en tant que window.truffleContract . Mais ce n'était pas un moyen efficace.


0 commentaires

1
votes

Pour moi, effacer le cache NPM Cache Clean -f

puis mise à jour de la version nœud à la dernière version stable (14.17.0) a fonctionné


0 commentaires

67
votes

Si vous utilisez fs , assurez-vous que ce n'est que dans getServersIDEPROPS . (Tout inclut le rendu côté serveur).

Vous devrez peut-être également créer un fichier next.config.js avec le contenu suivant pour obtenir le bundle client:

Pour webpack4

{
  fs: false,
  path: false
}

pour webpack5

module.exports = {
  webpack5: true,
  webpack: (config) => {
    config.resolve.fallback = { fs: false };

    return config;
  },
};

Remarque : Pour d'autres modules tels que path , vous pouvez ajouter plusieurs arguments tels que

module.exports = {
  webpack: (config, { isServer }) => {
    // Fixes npm packages that depend on `fs` module
    if (!isServer) {
      config.node = {
        fs: 'empty'
      }
    }

    return config
  }
}


2 commentaires

Réponse d'or! Juste que j'ai également dû ajouter path: false après fs: false .


Comme la question est posée sur fs uniquement, @JusticeBringer. Je ne pourrai peut-être pas ajouter le code, mais permettez-moi de l'ajouter comme une note.



0
votes

Pour moi, le problème était l'ancienne version du Node.js installé. Il nécessite Node.js version 14 et supérieur. La solution consistait à accéder à la page Web Node.js, à télécharger la dernière version et à l'installer. Puis réécoute le projet. Tout a fonctionné!


1 commentaires

Cela n'a pas fonctionné pour moi lorsque j'ai essayé de me construire avec le nœud 14.



0
votes

J'ai eu le même problème lorsque j'essayais d'utiliser Babel.

Pour moi, cela a fonctionné:

#add a .babelrc et définir les préréglages et les plugins (Dans mon cas, j'ai eu quelques problèmes avec les macros de Babel, donc je les ai définis)

{
    "presets": ["next/babel"],
    "plugins": ["macros"]
}

Après cela, arrêtez votre serveur et exécutez il encore


0 commentaires

0
votes

J'ai eu ce problème exact. Mon problème était que j'importais des types que j'avais déclarés dans un fichier Types.D.ts .

Je l'importais comme ça, grâce à l'autofill fourni par VScode.

import {CUSTOM_TYPE} from './types.d'

Cela aurait dû être comme ceci:

import {CUSTOM_TYPE} from './types'

Dans mon cas, je pense que le .d était inutile, j'ai donc fini par le supprimer entièrement et renommé mon fichier dans types.ts .

Assez bizarre, il était importé directement dans index.tsx sans problème, mais les fichiers / fonctions d'assistance dans le répertoire src me donneraient des erreurs.


0 commentaires

2
votes

J'ai obtenu cette erreur dans mon application NextJS parce que je manquais export dans

export function getStaticProps()


1 commentaires

J'ai eu une erreur connexe, mais à la place, j'ai mal orthographié GetServersIDEPROPS, donc j'utilisais le côté client du module FS. Une erreur facile à commettre!



13
votes

Exemple reproductible minimal

Un exemple minimal propre sera bénéfique pour les débutants de Webpack car la division automatique en fonction de l'utilisation est si époustouflante.

Travailler bonjour bonjour de référence mondiale :

pages / index.js

// Server-only code.

const fs = require('fs')

export function makeGetStaticProps(isBlue) {
  return () => {
    return { props: {
      fs: Object.keys(fs).join(' '),
      isBlue,
    } }
  }
}
  • front.js et front / * : fichiers frontaux + backend. Ceux-ci sont sûrs pour le frontend. Et le backend peut faire tout ce que le frontend peut faire (nous faisons SSR non?) Donc, ceux-ci sont également utilisables du backend.

    C'est peut-être l'idée derrière le dossier "Composants" conventionnel dans de nombreux exemples officiels. Mais c'est une mauvaise réputation, car ce dossier doit non seulement contenir des composants, mais aussi toutes les aides / constantes non composantes de la bibliothèque qui seront utilisées à partir du frontend.

  • back.js et back / * (ou alternativement tout ce qui en dehors de front / * ): backend uniquement les fichiers. Ceux-ci ne peuvent être utilisés que par le backend, les importations sur Frontend entraînera l'erreur


0 commentaires

3
votes

Si vous essayez d'utiliser FS-Extra dans Next.js, cela a fonctionné pour moi

module.exports = {
  webpack: (config) => {
    config.resolve.fallback = { fs: false, path: false, stream: false, constants: false };
    return config;

  }
}


1 commentaires

Se terminer avec return config;



18
votes

J'ai passé des heures là-dessus et la solution est également là sur Stackoverflow mais sur différents problèmes -> https://stackoverflow.com/ A / 67478653/17562602

Par la présente, j'ai demandé l'autorisation de mod pour remodeler cela, car ce problème est le premier à apparaître sur Google et probablement de plus en plus de personnes trébucheraient sur le même problème que moi, Je vais donc essayer de leur sauver des sueurs

soo, vous devez l'ajouter dans votre prochain.config.js

    module.exports = {
  future: {
    webpack5: true, // by default, if you customize webpack config, they switch back to version 4. 
      // Looks like backward compatibility approach.
  },
  webpack(config) {
    config.resolve.fallback = {
      ...config.resolve.fallback, // if you miss it, all the other options in fallback, specified
        // by next.js will be dropped. Doesn't make much sense, but how it is
      fs: false, // the solution
    };

    return config;
  },
};

Cela fonctionne comme Un charme pour moi


0 commentaires

0
votes

J'ai rencontré cela dans une application NextJS parce que j'avais défini une nouvelle fonction d'assistance directement en dessous de getServersIDEPROPS (), mais je n'avais pas encore appelé cette fonction à l'intérieur de getServersIDEPROPS ().

Je ne sais pas pourquoi cela a créé un problème, mais cela l'a fait. Je ne pouvais que le faire fonctionner en appelant cette fonction, en le supprimant ou en le commentant.


1 commentaires

Cela peut donner un aperçu des raisons pour lesquelles vous avez eu le problème: webpack avec les paquets suivants. >. Si vous avez des importations inutilisées. Erreur FS '.



0
votes
/** @type {import('next').NextConfig} */
module.exports = {
  reactStrictMode: false,
  webpack5: true,
  webpack: (config) => {
    config.resolve.fallback = {
      fs: false,
      net: false,
      dns: false,
      child_process: false,
      tls: false,
    };

    return config;
  },
};
This code fixed my problem and I want to share.Add this code to your next.config file.i'm using
webpack5

0 commentaires