richiedi file come stringa


99

Sto usando node + express e mi chiedo come posso importare qualsiasi file come stringa. Diciamo che ho un file txt tutto quello che voglio è caricarlo in una variabile in quanto tale.

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

io sono contro

modules.exports = function(){

    var string = "whatever";

    return string;

}

1
Non è una risposta, ma questo evita di creare una funzione: const { string } = require('words.js');dove words.jscontienemodule.exports = { string: 'whatever' };
Dem Pilafian

Risposte:


127

Se è per una o più estensioni specifiche, puoi aggiungere il tuo require.extensionsgestore:

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

Altrimenti, puoi mescolare fs.readFilecon 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 è ora deprecato per chiunque si imbatta in questo post. nodejs.org/api/globals.html#globals_require_extensions
blockloop

2
Deprecated in the pastmaSince 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
Sebbene sia effettivamente deprecato, esiste una buona alternativa? (che si estende richiede, intendo)
juandemarco

31

Per leggere il file CSS in String, usa questo codice. Funziona per .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
Come posso ottenere questo risultato per un file html? ho un file html in una directory di pari livello che devo leggere e caricare come stringa in cheerio?
lopezdp


0

puoi richiedere file .json, sia con node.js che con TypeScript. Questo è l'unico formato che supporta come richiesto () adatto per serializzare il testo. Puoi utilizzare uno strumento in fase di compilazione per impacchettare i tuoi file in un json, come https://github.com/cancerberoSgx/fs-to-json


0

La risposta selezionata è obsoleta e non è più consigliata . La documentazione di NodeJS suggerisce altri approcci come:

caricare i moduli tramite qualche altro programma Node.js.

ma non si espande più.

  • Puoi usare una libreria molto semplice come questa: require-text

  • O implementalo da solo (come dal pacchetto sopra :)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.