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;

}

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

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')

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


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();
    };
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.