Datei als Zeichenfolge erforderlich

98

Ich verwende Node + Express und frage mich nur, wie ich eine Datei als Zeichenfolge importieren kann. Nehmen wir an, ich habe eine txt-Datei. Ich möchte sie nur in eine Variable als solche laden.

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

Ich bin gegen

modules.exports = function(){

    var string = "whatever";

    return string;

}
ThomasReggi
quelle
1
Es ist keine Antwort, aber dies vermeidet das Erstellen einer Funktion: const { string } = require('words.js');wo words.jsenthältmodule.exports = { string: 'whatever' };
Dem Pilafian

Antworten:

127

Wenn es sich um eine (wenige) bestimmte Erweiterung (en) handelt, können Sie Ihren eigenen require.extensionsHandler hinzufügen :

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

Ansonsten können Sie mischen fs.readFilemit 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
quelle
51
require.extensions ist jetzt für jeden, der auf diesen Beitrag stößt, veraltet. nodejs.org/api/globals.html#globals_require_extensions
Blockloop
2
Deprecated in the pastaberSince 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
Gibt es eine gute Alternative, obwohl es in der Tat veraltet ist? (das verlängert erfordern, meine ich)
Juandemarco
31

Verwenden Sie diesen Code, um die CSS-Datei in String zu lesen. Es funktioniert für .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
quelle
2
Wie kann ich das für eine HTML-Datei erledigen? Ich habe eine HTML-Datei in einem Geschwisterverzeichnis, die ich lesen und als Zeichenfolge in Cheerio laden muss.
lopezdp
0

Sie können JSON-Dateien sowohl mit node.js als auch mit TypeScript anfordern. Dies ist das einzige Format, für das Unterstützung erforderlich ist (), das zum Serialisieren von Text geeignet ist. Sie können ein Tool zur Kompilierungszeit verwenden, um Ihre Dateien in einen JSON zu packen, z. B. https://github.com/cancerberoSgx/fs-to-json

Cancerbero
quelle