module.link(linker)


  • linker <Function>

    • specifier <string> 请求模块的说明符:

      ¥specifier <string> The specifier of the requested module:

      import foo from 'foo';
      //              ^^^^^ the module specifier 
    • referencingModule <vm.Module> Module 对象 link() 被调用。

      ¥referencingModule <vm.Module> The Module object link() is called on.

    • extra <Object>

      • attributes <Object> 来自属性的数据:

        ¥attributes <Object> The data from the attribute:

        import foo from 'foo' with { name: 'value' };
        //                           ^^^^^^^^^^^^^^^^^ the attribute 

        根据 ECMA-262,如果存在不受支持的属性,主机预计会触发错误。

        ¥Per ECMA-262, hosts are expected to trigger an error if an unsupported attribute is present.

      • assert <Object> extra.attributes 的别名。

        ¥assert <Object> Alias for extra.attributes.

    • 返回:<vm.Module> | <Promise>

      ¥Returns: <vm.Module> | <Promise>

  • 返回:<Promise>

    ¥Returns: <Promise>

链接模块依赖。此方法必须在求值前调用,并且每个模块只能调用一次。

¥Link module dependencies. This method must be called before evaluation, and can only be called once per module.

该函数应返回 Module 对象或最终解析为 Module 对象的 Promise。返回的 Module 必须满足以下两个不变量:

¥The function is expected to return a Module object or a Promise that eventually resolves to a Module object. The returned Module must satisfy the following two invariants:

  • 它必须与父 Module 属于相同的上下文。

    ¥It must belong to the same context as the parent Module.

  • 它的 status 不能是 'errored'

    ¥Its status must not be 'errored'.

如果返回的 Modulestatus'unlinked',则将在返回的 Module 上递归调用此方法,并使用相同提供的 linker 函数。

¥If the returned Module's status is 'unlinked', this method will be recursively called on the returned Module with the same provided linker function.

link() 返回 Promise,当所有链接实例都解析为有效的 Module 时,它将被解析,或者如果链接器函数抛出异常或返回无效的 Module,则被拒绝。

¥link() returns a Promise that will either get resolved when all linking instances resolve to a valid Module, or rejected if the linker function either throws an exception or returns an invalid Module.

链接器函数大致对应于 ECMAScript 规范中实现定义的 HostResolveImportedModule 抽象操作,但有几个关键区别:

¥The linker function roughly corresponds to the implementation-defined HostResolveImportedModule abstract operation in the ECMAScript specification, with a few key differences:

模块链接期间使用的实际 HostResolveImportedModule 实现是返回链接期间链接的模块的实现。由于此时所有模块都已经完全链接,因此 HostResolveImportedModule 实现根据规范是完全同步的。

¥The actual HostResolveImportedModule implementation used during module linking is one that returns the modules linked during linking. Since at that point all modules would have been fully linked already, the HostResolveImportedModule implementation is fully synchronous per specification.

对应 ECMAScript 规范中 循环模块记录Link() 具体方法 字段。

¥Corresponds to the Link() concrete method field of Cyclic Module Records in the ECMAScript specification.