вимагати файл як рядок


99

Я використовую node + express, і мені просто цікаво, як я можу імпортувати будь-який файл як рядок. Скажімо, у мене є файл txt, і я хочу лише завантажити його у змінну як таку.

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

51
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

10
Хоча це дійсно застаріле, чи є якась хороша альтернатива? (це вимагає, я маю на увазі)
— juandemarco

31

Щоб прочитати файл CSS у рядку, використовуйте цей код. Це працює для .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')

2
Як я можу зробити це для файлу html? у мене є файл html у каталозі братів і сестер, який мені потрібно прочитати та завантажити як рядок у cheerio?
— lopezdp


0

вам можуть знадобитися файли .json, як з node.js, так і з TypeScript. Це єдиний формат, який вимагає підтримки (), придатний для серіалізації тексту. Ви можете використовувати інструмент компіляції, щоб упакувати ваші файли в 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.