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.