为了允许自定义/本地化标准nodejs应用程序,我需要允许自定义.js文件覆盖/重新声明标准.js文件。
module.exports = {
include:include
}
function include(file_) {
with (global) {
eval(fs.readFileSync(file_) + '');
};
};
var x = require('../somefile');
exports.index = function(){
myvar:'yyyyyy'
}
var x = require('../somefile');
exports.index = function(){
myvar:'xxxxxx'
}
var fn = require('myfunc');
fn.include('custom.index.js');
问题似乎是,评估的代码包含在myfunc.js文件中而不包含在调用文件index.js中,而且require()文件的任何相对路径都是相对于index.js文件而不是调用文件,导致错误。
答案 0 :(得分:0)
不要这样做。 custom.myother.js
中的错误将导致难以调试的错误(更不用说如果您不小心使用--use-strict
运行代码,一切都将停止工作)
相反,将其他代码作为模块加载并将其与默认代码合并:
var defaults = {
name: "Cool Application",
fun1: function() { console.log(this.name); }
};
var extend = require("underscore").extend;
module.exports.load = function load(file_) {
var customizations = require(file_);
return extend({}, defaults, customizations);
};
module.exports.name = "De Moda Aplicación";
var i118n = require('myCustomLocalizationEngine');
var bundleES = i118n.load('customization.magic.js'),
bundleUS = i118n.load();
bundleES.fun1(); // Logs "De Moda Aplicación"
bundleUS.fun1(); // Logs "Cool Application"
如果你绝对,积极地,为了这一切都是圣洁的,请告诉我这样的 - 我可以拯救全人类 - 来自这个生物绝对邪恶必须这样做:
放弃希望,所有进入这里的人
将
global
和__dirname
传递到您的include
函数function include(g, directory, filename) { with(g) { eval(fs.readFileSync(path.join(directory, filename)) + ''); }; }
e。 G。fn.include(global, __dirname, 'custom.myother.js')