ต้องการไฟล์เป็นสตริง


104

ฉันใช้ 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' };
— Dem Pilafian

คำตอบ:


133

หากเป็นส่วนขยายเฉพาะ (ไม่กี่รายการ) คุณสามารถเพิ่มตัว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);
});

53
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

12
แม้ว่าจะเลิกใช้งานจริง แต่มีทางเลือกอื่นที่ดีหรือไม่? (ที่ต้องขยายฉันหมายถึง)
— Gian Marco Toso

38

หากต้องการอ่านไฟล์ 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')

4
ฉันจะทำสิ่งนี้สำหรับไฟล์ html ได้อย่างไร ฉันมีไฟล์ html ในไดเร็กทอรีพี่น้องที่ฉันต้องอ่านและโหลดเป็นสตริงใน Cheerio?
— lopezdp


1

คำตอบที่เลือกเลิกใช้แล้วและไม่แนะนำอีกต่อไป เอกสาร NodeJS แนะนำแนวทางอื่น ๆ เช่น:

โหลดโมดูลผ่านโปรแกรม Node.js อื่น ๆ

แต่มันไม่ได้ขยายไปมากกว่านี้

  • คุณสามารถใช้ไลบรารีที่เรียบง่ายเช่นนี้: ต้องมีข้อความ

  • หรือใช้งานเอง (เช่นจากแพ็คเกจด้านบน :)

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

0

คุณสามารถต้องการไฟล์. json ทั้งที่มี node.js และ TypeScript นี่เป็นรูปแบบเดียวที่รองรับการกำหนด () เหมาะสำหรับการจัดลำดับข้อความ คุณสามารถใช้เครื่องมือเวลาคอมไพล์เพื่อแพ็คไฟล์ของคุณลงใน json เช่นhttps://github.com/cancerberoSgx/fs-to-json

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.