membutuhkan file sebagai string

100

Saya menggunakan node + express dan saya hanya ingin tahu bagaimana saya dapat mengimpor file apa pun sebagai string. Katakanlah saya memiliki file txt yang saya inginkan adalah memuatnya ke dalam variabel seperti itu.

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

Saya menentang

modules.exports = function(){

    var string = "whatever";

    return string;

}
ThomasReggi
sumber
1
Ini bukan jawaban, tapi ini menghindari pembuatan fungsi: const { string } = require('words.js');where words.jscontainsmodule.exports = { string: 'whatever' };
Dem Pilafian

Jawaban:

127

Jika itu untuk (beberapa) ekstensi tertentu, Anda dapat menambahkan require.extensionspenangan Anda sendiri :

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

Jika tidak, Anda dapat mencampur fs.readFiledengan 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);
});
Jonathan Lonowski
sumber
52
require.extensions sekarang tidak digunakan lagi untuk siapa pun yang menemukan postingan ini. nodejs.org/api/globals.html#globals_require_extensions
blockloop
2
Deprecated in the pasttetapiSince 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
11
Meskipun memang sudah usang, apakah ada alternatif yang baik? (yang meluas membutuhkan, maksud saya)
juandemarco
32

Untuk membaca file CSS menjadi String, gunakan kode ini. Ini bekerja untuk .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')
Max Ma
sumber
3
Bagaimana saya bisa menyelesaikan ini untuk file html? saya memiliki file html dalam direktori saudara yang perlu saya baca dan muat sebagai string ke cheerio?
lopezdp
0

Anda dapat meminta file .json, dengan node.js dan TypeScript. Itulah satu-satunya format yang mendukung required () sesuai untuk serialisasi teks. Anda dapat menggunakan alat waktu kompilasi untuk mengemas file Anda ke dalam json, seperti https://github.com/cancerberoSgx/fs-to-json

cancerbero
sumber
0

Jawaban yang dipilih sudah tidak digunakan lagi dan tidak direkomendasikan lagi. Dokumentasi NodeJS menyarankan pendekatan lain seperti:

memuat modul melalui beberapa program Node.js lainnya

tetapi tidak berkembang lagi.

  • Anda dapat menggunakan pustaka yang sangat sederhana seperti ini: memerlukan-teks

  • Atau terapkan sendiri (seperti dari paket di atas:)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
mim
sumber