exiger un fichier sous forme de chaîne

99

J'utilise node + express et je me demande simplement comment importer n'importe quel fichier sous forme de chaîne. Disons que j'ai un fichier txt, tout ce que je veux, c'est le charger dans une variable en tant que telle.

var string = require("words.txt");

je suis contre

modules.exports = function(){

    var string = "whatever";

    return string;

}
ThomasReggi
la source
1
Ce n'est pas une réponse, mais cela évite de créer une fonction: const { string } = require('words.js');where words.jscontainsmodule.exports = { string: 'whatever' };
Dem Pilafian

Réponses:

127

Si c'est pour une (quelques) extension (s) spécifique (s), vous pouvez ajouter votre propre require.extensionsgestionnaire:

var fs = require('fs');

require.extensions['.txt'] = function (module, filename) {
    module.exports = fs.readFileSync(filename, 'utf8');
};

var words = require("./words.txt");

console.log(typeof words); // string

Sinon, vous pouvez mélanger fs.readFileavec require.resolve:

var fs = require('fs');

function readModuleFile(path, callback) {
    try {
        var filename = require.resolve(path);
        fs.readFile(filename, 'utf8', callback);
    } catch (e) {
        callback(e);
    }
}

readModuleFile('./words.txt', function (err, words) {
    console.log(words);
});
Jonathan Lonowski
la source
51
require.extensions est désormais obsolète pour quiconque rencontre ce message. nodejs.org/api/globals.html#globals_require_extensions
blockloop
2
Deprecated in the pastbutSince the module system is locked, this feature will probably never go away. However, it may have subtle bugs and complexities that are best left untouched.
loretoparisi
10
Bien qu'il soit en effet obsolète, existe-t-il une bonne alternative? (qui étend exigent, je veux dire)
juandemarco
31

Pour lire le fichier CSS dans String, utilisez ce code. Cela fonctionne pour .txt.

const fs = require('fs')
const path = require('path')

const css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')

ES6:

import fs from 'fs'
import path from 'path'

let css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')
Max Ma
la source
2
Comment puis-je faire cela pour un fichier html? J'ai un fichier html dans un répertoire frère que j'ai besoin de lire et de charger sous forme de chaîne dans cheerio?
lopezdp
0

vous pouvez avoir besoin de fichiers .json, à la fois avec node.js et TypeScript. C'est le seul format qui prend en charge requis () adapté à la sérialisation du texte. Vous pouvez utiliser un outil de compilation pour emballer vos fichiers dans un json, tel que https://github.com/cancerberoSgx/fs-to-json

cancerbero
la source
0

La réponse sélectionnée est obsolète et n'est plus recommandée . La documentation NodeJS suggère d' autres approches telles que:

chargement de modules via un autre programme Node.js

mais il ne se développe plus.

  • Vous pouvez utiliser une bibliothèque très simple comme celle-ci: require-text

  • Ou implémentez-le vous-même (comme dans le package ci-dessus :)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
mim
la source