requer arquivo como string


99

Estou usando o node + express e estou me perguntando como posso importar qualquer arquivo como uma string. Vamos dizer que eu tenho um arquivo txt e tudo que eu quero é carregá-lo em uma variável como tal.

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

Eu sou contra

modules.exports = function(){

    var string = "whatever";

    return string;

}

1
Não é uma resposta, mas evita a criação de uma função: const { string } = require('words.js');where words.jscontémmodule.exports = { string: 'whatever' };
— Dem Pilafian

Respostas:


127

Se for para uma (algumas) extensões específicas, você pode adicionar seu próprio require.extensionsmanipulador:

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

Caso contrário, você pode misturar fs.readFilecom 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);
});

51
require.extensions agora está obsoleto para qualquer pessoa que encontrar esta postagem. nodejs.org/api/globals.html#globals_require_extensions
— blockloop

2
Deprecated in the pastmasSince 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

10
Embora esteja de fato obsoleto, existe alguma boa alternativa? (que estende exigir, quero dizer)
— juandemarco

31

Para ler o arquivo CSS em String, use este código. Funciona para .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')

2
Como posso fazer isso para um arquivo html? Eu tenho um arquivo html em um diretório irmão que preciso ler e carregar como uma string no cheerio?
— lopezdp


0

você pode exigir arquivos .json, tanto com node.js quanto TypeScript. Esse é o único formato que suporta ser obrigatório () adequado para serializar texto. Você pode usar uma ferramenta de tempo de compilação para compactar seus arquivos em um json, como https://github.com/cancerberoSgx/fs-to-json


0

A resposta selecionada está obsoleta e não é mais recomendada . A documentação do NodeJS sugere outras abordagens, como:

carregar módulos por meio de algum outro programa Node.js.

mas não se expande mais.

  • Você pode usar uma biblioteca muito simples como esta: require-text

  • Ou implemente você mesmo (como no pacote acima:)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
    
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.