【问题标题】:How to get the handle of an anonymous module with requirejs?如何使用 requirejs 获取匿名模块的句柄?
【发布时间】:2015-12-14 09:30:42
【问题描述】:
define(['somethingRequired'],function(somethingRequired) {
   // code
});

假设这段代码在 test.js 中,使用控制台,我如何在加载后检查它并调整它的属性?从文档中我看到可以给模块命名,但事实并非如此,我想知道匿名模块会发生什么。如果问题不清楚或写得不好,请提前道歉,接受反馈

Louis 答案更新:我尝试了两种缩写形式 //var foo = require(['foo']); var foo = require('foo'); 和异步调用 要求(['foo'],函数(foo_){ foo = foo_; }); 两者都没有使模块在全局范围内泄漏。我还缺少什么吗? 还尝试在异步调用中添加一个 console.log('done') 但它从未出现在控制台中

【问题讨论】:

    标签: javascript requirejs


    【解决方案1】:

    您误解了在没有模块名称作为第一个参数的情况下调用 define 的含义。它唯一做的就是让 RequireJS 在运行时根据 RequireJS 的配置找出模块名称。例如,假设我有一个来自baseUrl 目录的文件,其相对路径为foo/bar.js,并且该文件调用define 而不设置模块名称。我可以通过 require(['foo/bar'], ... 加载这个模块但是,如果我有以下配置:

    paths: {
        bar: 'foo/bar'
    }
    

    然后我可以用require(['bar'], ... 加载它如果我有define('foo/bar', ...,那么第一个require 可以工作,但第二个不行。如果我有define('bar', ...,那么第二个require 会起作用,但不是第一个。

    不过,最终,当您加载一个不使用模块名称调用 define 的模块时,您仍然必须使用某个名称来加载它。所以您需要弄清楚您正在检查的应用程序用于引用您感兴趣的模块,并使用该名称。

    加载模块后,您唯一可以摆弄的就是模块导出的值。任何未出口的都是禁区。

    一旦您为您的模块命名,您必须在控制台发出require 调用以获取对该模块的引用。如果模块已经加载,你可以使用var foo = require(module_name)。这是require 的同步形式,使用方便,但仅在模块已加载时才有效。如果该模块尚未加载,那么您必须使用类似require([module_name], function (foo_) { foo = foo_ }); 的东西(注意这里的第一个参数是一个数组)来获取一个全局foo 以设置为您的模块。请参阅this answer 以获得更详细的说明。

    【讨论】:

      【解决方案2】:

      您可以利用模块内部的自调用函数,以便在模块加载后立即执行。

      更多关于自调用函数 - A self invoking anonymous function expression

      【讨论】:

      • 我正在尝试理解使用 requirejs 的其他代码
      猜你喜欢
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多