dize olarak dosya gerektirir


103

Node + express kullanıyorum ve herhangi bir dosyayı bir dize olarak nasıl içe aktarabileceğimi merak ediyorum. Bir txt dosyam olduğunu varsayalım, tek istediğim onu ​​böyle bir değişkene yüklemek.

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

ben karşıyım

modules.exports = function(){

    var string = "whatever";

    return string;

}

1
Bu bir cevap değil, ancak bu bir işlev oluşturmaktan kaçınıyor: const { string } = require('words.js');nerede words.jsiçerirmodule.exports = { string: 'whatever' };
— Dem Pilafian

Yanıtlar:


131

Bir (birkaç) belirli uzantı içinse, kendi require.extensionsişleyicinizi ekleyebilirsiniz :

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

Aksi halde, karıştırabilirsiniz fs.readFileile 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, artık bu gönderiye rastlayan herkes için kullanımdan kaldırıldı. nodejs.org/api/globals.html#globals_require_extensions
— blockloop

2
Deprecated in the pastveSince 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
Gerçekten kullanımdan kaldırılmış olsa da, iyi bir alternatif var mı? (bu uzatır, demek istiyorum)
— juandemarco

36

CSS dosyasını String'e okumak için bu kodu kullanın. İçin çalışıyor .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
Bunu bir html dosyası için nasıl yapabilirim? Kardeş dizininde okuyup cheerio'ya bir dize olarak yüklemem gereken bir html dosyam var mı?
— lopezdp


1

Seçilen cevap olduğunu kaldırılmış ve tavsiye edilmez artık. NodeJS belgeleri , aşağıdakiler gibi başka yaklaşımlar önerir :

modülleri başka bir Node.js programı aracılığıyla yükleme

ama artık genişlemiyor.

  • Bunun gibi çok basit bir kitaplık kullanabilirsiniz: required-text

  • Veya kendiniz uygulayın (yukarıdaki pakette olduğu gibi:)

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

0

Hem node.js hem de TypeScript ile .json dosyalarını zorunlu kılabilirsiniz. Metni serileştirmek için gerekli olanı destekleyen tek biçim budur (). Dosyalarınızı https://github.com/cancerberoSgx/fs-to-json gibi bir json içine paketlemek için bir derleme zamanı aracı kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.