requerir archivo como cadena

99

Estoy usando node + express y me pregunto cómo puedo importar cualquier archivo como una cadena. Digamos que tengo un archivo txt, todo lo que quiero es cargarlo en una variable como tal.

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

Estoy en contra

modules.exports = function(){

    var string = "whatever";

    return string;

}
ThomasReggi
fuente
1
No es una respuesta, pero esto evita crear una función: const { string } = require('words.js');donde words.jscontienemodule.exports = { string: 'whatever' };
Dem Pilafian

Respuestas:

127

Si es para una (s) extensión (es) específica (s), puede agregar su propio require.extensionscontrolador:

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

De lo contrario, puede mezclar fs.readFilecon 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);
});
Jonathan Lonowski
fuente
51
require.extensions ahora está en desuso para cualquiera que se encuentre con esta publicación. nodejs.org/api/globals.html#globals_require_extensions
blockloop
2
Deprecated in the pastperoSince 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
Si bien está en desuso, ¿hay alguna buena alternativa? (que extiende requieren, quiero decir)
juandemarco
31

Para leer el archivo CSS en 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')
Max Ma
fuente
2
¿Cómo puedo hacer esto para un archivo html? tengo un archivo html en un directorio hermano que necesito leer y cargar como una cadena en cheerio?
lopezdp
0

puede requerir archivos .json, tanto con node.js como con TypeScript. Ese es el único formato que admite el requerimiento () adecuado para serializar texto. Puede utilizar una herramienta de tiempo de compilación para empaquetar sus archivos en un json, como https://github.com/cancerberoSgx/fs-to-json

cancerbero
fuente
0

La respuesta seleccionada está obsoleta y ya no se recomienda . La documentación de NodeJS sugiere otros enfoques como:

carga de módulos a través de algún otro programa Node.js

pero no se expande más.

  • Puede usar una biblioteca muy simple como esta: require-text

  • O impleméntelo usted mismo (como en el paquete anterior :)

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