2012-10-05 149 views
46

我使用节点+快递,我只是想知道如何我可以导入任何文件作为字符串。比方说,我有一个txt文件,我想要的是将其加载到变量中。需要文件作为字符串

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

我反对

modules.exports = function(){ 

    var string = "whatever"; 

    return string; 

} 
+1

这不是一个答案,但这可以避免创建一个函数:'const {string} = require('words.js');'where'words.js' contains'module.exports = {string:'whatever' };' –

回答

68

如果它是一个(几个)特定扩展(S),你可以添加自己的require.extensions处理程序:

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 

否则,你可以混合fs.readFilerequire.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现在不适用于任何遇到此帖的人。 http://nodejs.org/api/globals.html#globals_require_extensions – blockloop

+1

'过去弃用'但是'由于模块系统被锁定,这个功能可能永远不会消失。然而,它可能有微妙的错误和复杂性,最好保持原封不动。 – loretoparisi

+1

虽然它确实被弃用,有没有什么好的选择? (这扩展了我的意思) – juandemarco

3

仅使用标准库:

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')); 
相关问题