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


100

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

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

Я против

modules.exports = function(){

    var string = "whatever";

    return string;

}

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();
    };
    
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.