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.