NodeJS模块包含功能

时间:2014-01-16 03:37:02

标签: node.js

为了允许自定义/本地化标准nodejs应用程序,我需要允许自定义.js文件覆盖/重新声明标准.js文件。

myfunc.js

module.exports = {
    include:include
}

function include(file_) {
    with (global) {
        eval(fs.readFileSync(file_) + '');
    };
};

custom.index.js

var x = require('../somefile');
exports.index = function(){
  myvar:'yyyyyy'
}

index.js

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文件而不是调用文件,导致错误。

1 个答案:

答案 0 :(得分:0)

不要这样做。 custom.myother.js中的错误将导致难以调试的错误(更不用说如果您不小心使用--use-strict运行代码,一切都将停止工作)

相反,将其他代码作为模块加载并将其与默认代码合并:

myCustomLocalizationEngine.js

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);
};

customization.magic.js

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')