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.