使用requirejs选择性加载AMD模块

3

我有一个使用情况,需要根据某些条件加载 AMD 模块,以便使用 requirejs 定义另一个模块。

define(['module1'],
    function(module1)
    {
      /*some code*/

      if (condition1) {
        require(['module2'],
            function()
            {
                /*some code*/
            }
        )        
      }
      else {
         require(['module3'],
            function()
            {
               /*some code*/
            }
        )     
    }
    return someObject;
    });

我看到了这个问题,对全局和局部的require感到困惑。
上述方法正确吗?


它是否有效? - mpm
是的,它能够工作,尽管我在我的代码中使用了CommonJS风格。define(['require', 'module1'], function (require, module1) { var module2 = require('module2'); return something; }); - bitsbuffer
真的可以工作吗?对我来说,它不起作用,因为在加载module2之前。我收到错误消息:module2尚未为上下文加载。使用require([])。这意味着它需要异步加载。我该如何同步处理?在第一次调用时使用require("module2")获取module2。 - ccsakuweb
1个回答

3
你应该使用 'local' require。本地的 require 将确保模块相对于 '父' 模块进行解析。
define(["require", "module1"], function(require, module1) {
    require(['./relative/to/parent/not/necessarily/relative/to/baseUrl'], ...);

同时,URL也是相对于“父”模块解析的。

define(["require", "module1"], function(require, module1) {
    require.toUrl('./relative/to/parent/not/necessarily/relative/to/baseUrl')

我相信这可以缩短为 define(function(require) { //... }) - Simon Smith
是的,我认为OP也需要导入module1,所以在这种情况下可能不能使用那种格式。我会更新我的答案,使其更加明确。 - Paul Grime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接