[英]Isomorphic JavaScript with RequireJS
我有一些同构JavaScript。 我在客户端使用RequireJS。
(function() {
'use strict';
function wrapper(require) {
var MyDep = require('my-dependency');
return function MyExportedFunction() {
// ...
};
}
if ((typeof exports === 'object') && module) {
module.exports = wrapper(require); // CommonJS
} else if ((typeof define === 'function') && define.amd) {
define(function(require) {
/**
* I need to `require` dependencies
* in here for them to be available inside
* the wrapper function :(
*/
require('my-dependency');
return wrapper(require);
}); // AMD
}
}());
有没有一种方法可以避免必须在wrapper
函数调用之前放置require
语句?
如果我省略了require
语句,RequireJS会抱怨尚未为上下文加载依赖项。
我认为这是RequireJS提前解析和识别需求依赖项的能力的不可克服的局限。
是啊,RequireJS只能处理CommonJS的形式的require
,只有当它是在传递给工厂函数直接呈现的define
。 如果它出现在从工厂函数调用的函数中,但在函数外部定义,则它将不起作用。 在内部,RequireJS在工厂函数的源代码上运行正则表达式。
话虽这么说,在我看来,您应该可以用以下命令替换当前define
调用:
define(wrapper)
这将使用对RequireJS的require
函数的引用来调用wrapper
, 并且 RequireJS应该能够分析wrapper
的来源以提取CommonJS调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.