2012-10-05 28 views
46

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.requerir archivo como cadena

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

estoy en contra de

modules.exports = function(){ 

    var string = "whatever"; 

    return string; 

} 
+1

No es una respuesta, pero esto evita crear una función: 'const {string} = require ('words.js');' donde 'words.js' contiene' module.exports = {string: 'whatever' }; ' –

Respuesta

68

Si es para un (algunos) de extensión (s) específico, puede añadir su require.extensions manejador:

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, se pueden mezclar fs.readFile con 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); 
}); 
+31

require.extensions ahora está en desuso para cualquiera que se encuentre con esta publicación. http://nodejs.org/api/globals.html#globals_require_extensions – blockloop

+1

'Obsoleto en el pasado' pero' Dado que el sistema del módulo está bloqueado, esta característica probablemente nunca desaparecerá. Sin embargo, puede tener fallas y complejidades sutiles que es mejor dejar intactas. – loretoparisi

+1

Si bien está en desuso, ¿hay alguna buena alternativa? (Eso se extiende requiere, quiero decir) – juandemarco

3

Uso de solo libretas estándar:

var fs = require('fs'); 
var exec = require('child_process').exec; 

// async 
fs.readFile('./data.txt', 'utf8', function(oErr, sText) { 
    console.log(sText); 
}); 

// sync 
console.log(fs.readFileSync('./data.txt', 'utf8')); 
Cuestiones relacionadas