web-dev-qa-db-fra.com

Webpack nodejs fs.readFile n'est pas une fonction

J'ai une configuration webpack comme:

var path = require('path')

module.exports = {
    entry: "./index.js",
    output: {
        path: path.join(__dirname, 'static'),
        filename:'bundle.js'
    },
    module: {
        loaders: [
            { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader"},
            { test: /\.json$/, loader: 'json-loader' },
        ]
    },
    node: {
      fs: "empty"
    }
};

Et je veux lire un fichier en utilisant fs

Je fais quelque chose comme:

var fs = require('fs')
console.log(fs)

fs.readFile('input.txt', function (err, buffer) {
        console.log("buffer")
        console.log(buffer)


    })

Je veux juste lire un fichier ici mais quand je le fais, cela me donne une erreur en disant:

fs.readFile N'est pas une fonction

J'ai installé fs en utilisant npm install --save fs

De plus, lorsque j'imprime fs, cela me donne un objet vide. Ci-dessus j'ai fait console.log(fs) ça me donne un objet vide

Qu'est-ce qui ne va pas ici?

18
gamer

Votre code a l'air bien! Il n'y a donc rien de mal avec le code. Pour vérifier, essayez d'exécuter le même code ici https://www.tutorialspoint.com/execute_nodejs_online.php et vous pouvez voir que console.log(fs); ne sera pas vide.

Ainsi, la raison pour laquelle votre code affiche une erreur est que vous avez installé le module de noeud nommé 'fs' en utilisant la commande npm install --save fs Que vous ne devriez pas! Node propose ce module par défaut. Tout ce que vous avez à faire est de simplement utiliser const fs = require('fs'); (en utilisant var ou let est également trouvé mais je recommanderai const ici).

Il vous suffit donc de supprimer le dossier node_modules Local, puis d'exécuter à nouveau ce code en installant les autres modules que vous souhaitez et il fonctionnera correctement!

J'espère que cela t'aides :)

1
Viraj Shelke

Comme je crois que les commentaires mentionnés,

node: { fs: "empty" }

Doit être retiré. De plus, tout votre code doit s'exécuter sur le serveur. Vous ne pouvez pas lire des fichiers comme celui-ci dans le navigateur. Node Les API sont côté serveur uniquement, vous devez donc créer une API à l'aide d'express ou d'une bibliothèque similaire, par exemple.

    router.get('/file/read', (req, res, next) => { fs.readFile('input.txt', function (err, buffer) {
            console.log("buffer")
            res.send(buffer);
        }) 
    })

Ensuite, dans votre navigateur, vous devez utiliser AJAX pour appeler l'API et récupérer le contenu du fichier.

La lecture de fichiers arbitraires a PROBLÈMES DE SÉCURITÉ ÉVITABLES. Vous ne devez pas autoriser l'API à lire les fichiers que l'utilisateur aime. Vous devez être très prudent ici pour restituer les entrées et limiter l'ensemble des fichiers disponibles.

0
Brenn