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


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.