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;

}

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

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

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


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();
    };
    
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.