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.