显然没有办法在 modulr 中解决这个问题,所以我必须创建一个名为Env的解决方法模块,如下所示:
// Env.js
var my = {
modules: undefined,
require: require
};
exports.override = function(modules) {
my.modules = modules;
};
exports.require = function(path) {
if (my.modules && my.modules[path]) {
return my.modules[path];
} else {
// my.require(...) is needed instead of simply require(...)
// because simply require(...) will cause a modulr parsing failure
return my.require(path);
}
};
在客户端,有一个特定的初始化程序:
// ClientInitializer.js
Env = require('shared/Env');
Env.override({ underscore: _ });
因此,“共享”模块可以执行以下操作:
// SharedModule.js
var _ = require('shared/Env').require('underscore');
如果“共享”模块正在服务器中运行,则调用正常的 require 函数。如果它在浏览器中运行,Env模块将使用全局 _ 变量来回答。