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


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.