требовать файл как строку

100

Я использую node + express, и мне просто интересно, как я могу импортировать любой файл в виде строки. Допустим, у меня есть текстовый файл, все, что я хочу, это загрузить его в переменную как таковую.

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

Я против

modules.exports = function(){

    var string = "whatever";

    return string;

}
ThomasReggi
источник
1
Это не ответ, но это позволяет избежать создания функции: const { string } = require('words.js');где words.jsсодержитmodule.exports = { string: 'whatever' };
Дем

Ответы:

127

Если это для (несколько) определенного расширения (ов), вы можете добавить свой собственный require.extensionsобработчик:

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

В противном случае вы можете смешать fs.readFileс 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 теперь устарел для всех, кто наткнулся на этот пост. nodejs.org/api/globals.html#globals_require_extensions
blockloop
2
Deprecated in the pastноSince 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 09
11
Хотя он действительно устарел, есть ли хорошая альтернатива? (я имею в виду, что расширяет require)
juandemarco 02
32

Чтобы прочитать файл CSS в String, используйте этот код. Это работает .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')
Макс Ма
источник
3
Как я могу это сделать для HTML-файла? у меня есть html-файл в родном каталоге, который мне нужно прочитать и загрузить в виде строки в Cheerio?
lopezdp 03
0

вам могут потребоваться файлы .json как с node.js, так и с TypeScript. Это единственный поддерживаемый формат required (), подходящий для сериализации текста. Вы можете использовать инструмент времени компиляции для упаковки файлов в json, например https://github.com/cancerberoSgx/fs-to-json.

ракберо
источник
0

Выбранный ответ устарел и больше не рекомендуется . Документация NodeJS предлагает другие подходы, например:

загрузка модулей через другую программу Node.js

но больше не расширяется.

  • Вы можете использовать очень простую библиотеку вроде этой: require-text

  • Или реализовать его самостоятельно (например, из пакета выше :)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
    
мим
источник