wymagaj pliku jako łańcucha

103

Używam node + express i zastanawiam się, jak mogę zaimportować dowolny plik jako ciąg. Powiedzmy, że mam plik txt, a chcę tylko załadować go do zmiennej jako takiej.

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

Jestem przeciwko

modules.exports = function(){

    var string = "whatever";

    return string;

}
ThomasReggi
źródło
1
To nie jest odpowiedź, ale pozwala to uniknąć tworzenia funkcji: const { string } = require('words.js');gdzie words.jszawieramodule.exports = { string: 'whatever' };
Dem Pilafian

Odpowiedzi:

130

Jeśli dotyczy (kilku) określonych rozszerzeń, możesz dodać własną require.extensionsprocedurę obsługi:

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

W przeciwnym razie możesz mieszać fs.readFilez 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
źródło
52
require.extensions jest teraz przestarzała dla każdego, kto napotka ten post. nodejs.org/api/globals.html#globals_require_extensions
blockloop
2
Deprecated in the pastaleSince 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
11
Chociaż jest to rzeczywiście przestarzałe, czy istnieje dobra alternatywa? (to rozciąga, mam na myśli)
juandemarco
36

Aby odczytać plik CSS na String, użyj tego kodu. To działa dla .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
źródło
4
Jak mogę to zrobić dla pliku html? mam plik html w katalogu rodzeństwa, który muszę przeczytać i załadować jako ciąg do cheerio?
lopezdp
0

możesz wymagać plików .json, zarówno z node.js, jak i TypeScript. To jedyny format, który obsługuje funkcję required () odpowiednią do serializacji tekstu. Możesz użyć narzędzia kompilacji, aby spakować pliki do pliku json, takiego jak https://github.com/cancerberoSgx/fs-to-json

rakbero
źródło
0

Wybrana odpowiedź jest przestarzała i nie jest już zalecana . Dokumentacja NodeJS sugeruje inne podejścia, takie jak:

ładowanie modułów przez inny program Node.js.

ale już się nie rozszerza.

  • Możesz użyć bardzo prostej biblioteki, takiej jak ta: require-text

  • Lub zaimplementuj to samodzielnie (jak z powyższego pakietu:)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
    
mim
źródło