Javascript 有没有办法导入ES模块的部件而不产生副作用?

Javascript 有没有办法导入ES模块的部件而不产生副作用?,javascript,es6-modules,Javascript,Es6 Modules,导入模块的特定部分时,是否可以在不获取模块所有副作用的情况下导入该模块 例如: Module_A.js导出自定义元素(CustomElement)的类定义,但也在自定义元素注册表中将该元素定义为副作用 Module_B.js从Module_A导入CustomElement,以便可以扩展它,但是由于Module_A已经在注册表中定义了CustomElement,Module_B无法使用该名称定义它自己的元素 理想情况下,Module_B将能够从Module_A导入CustomElement,而

导入模块的特定部分时,是否可以在不获取模块所有副作用的情况下导入该模块

例如:

  • Module_A.js
    导出自定义元素(
    CustomElement
    )的类定义,但也在自定义元素注册表中将该元素定义为副作用
  • Module_B.js
    Module_A
    导入
    CustomElement
    ,以便可以扩展它,但是由于
    Module_A
    已经在注册表中定义了
    CustomElement
    Module_B
    无法使用该名称定义它自己的元素
理想情况下,
Module_B
将能够从
Module_A
导入
CustomElement
,而无需运行任何
Module_A
的副作用,允许使用所需的特定部件,也不会运行任何意外情况


这可能吗?

不,这不可能。你所能做的就是将模块分开以消除副作用

以你为例,

  • CustomElement.js
    将导出自定义元素的类定义(
    CustomElement
  • Module_A.js
    将导入
    CustomElement
    ,并在customelements注册表中将该元素定义为副作用
  • Module_B.js
    将导入
    CustomElement
    ,以便可以扩展它,并使用该名称定义自己的元素

为什么模块B会创建一个行为不同的类,但却以相同的名称注册它?@Bergi在这种情况下,这是因为I有一组基本元素,主要用于扩展,以便为每个项目添加次要的定制。虽然元素的核心意图是相同的,所以在我看来,它实际上并不保证使用不同的标记名,但是如果它是要扩展的,那么它绝对不应该注册自己。此外,您是否确定子类化是每个项目自定义此基本元素的适当工具?主要是指子类化,但它仍然能够单独使用,并且默认情况下将一直使用到扩展为止。我相信子类化是基于我需要做的定制类型的唯一方法(某些方法正在被稍微不同的行为所取代)。我认为你的答案是最好的方法。。。保持类定义和元素注册分开让我做我需要做的事情-避免在不单独使用基本元素时注册它,即使它确实不幸导致需要存在大量非常小的文件!