0

我有一些同构的 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
    }
}());

有没有办法避免必须将require语句放置在wrapper函数调用之前?

如果我省略该require语句,RequireJS 会抱怨尚未为上下文加载依赖项。

我认为这是 RequireJS 提前解析和识别所需依赖项的能力的一个不可逾越的限制。

4

1 回答 1

2

是的,RequireJS 只能处理 CommonJS 形式,require只有当它立即出现在传递给define. 如果它出现在从工厂函数调用但在函数外部定义的函数中,则它将不起作用。在内部,RequireJS 在工厂函数的源代码上运行正则表达式。

话虽如此,在我看来,您应该能够将当前的调用替换为define

define(wrapper)

这将使用对 RequireJS函数wrapper的引用进行调用,并且RequireJS 应该能够分析来源以提取 CommonJS 调用。requirewrapper

于 2015-06-09T16:09:49.453 回答