与 RequireJS 同构 JavaScript
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 只能处理 require
的 CommonJS 形式,前提是它立即出现在传递给 define
的工厂函数中。如果它出现在从工厂函数调用但在函数外部定义的函数中,则它将不起作用。在内部,RequireJS 在工厂函数的源代码上运行一个正则表达式。
话虽这么说,但在我看来,您应该能够将当前对 define
的调用替换为:
define(wrapper)
这将调用 wrapper
并引用 RequireJS 的 require
函数 和 RequireJS 应该能够分析 wrapper
的来源提取 CommonJS 调用。
我有一些同构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 只能处理 require
的 CommonJS 形式,前提是它立即出现在传递给 define
的工厂函数中。如果它出现在从工厂函数调用但在函数外部定义的函数中,则它将不起作用。在内部,RequireJS 在工厂函数的源代码上运行一个正则表达式。
话虽这么说,但在我看来,您应该能够将当前对 define
的调用替换为:
define(wrapper)
这将调用 wrapper
并引用 RequireJS 的 require
函数 和 RequireJS 应该能够分析 wrapper
的来源提取 CommonJS 调用。