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;

}

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);
});

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')

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


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();
    };
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.