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


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.