如何自动呼叫系统或AMD模块?

时间:2017-04-07 07:54:26

标签: javascript typescript amd systemjs

问题:

如何自动调用系统或AMD模块而无需手动添加脚本来调用已注册/已定义的模块?

说明

当我使用System中定义的tsconfig模块生成我的es5文件时,我得到System.register(/* ... */)的预期输出,这当然不会得到添加到我的页面时运行。

有没有办法避免在我的HTML文件中添加脚本标记来手动调用我的模块?

<!-- module script added above -->
<script>
  System.get('MODULE_NAME_HERE');
</script>

额外:

如果可以,我可以完全放弃System / Amd模块。但是,我需要在outFile中使用import/export时决定创建一个Typescript的时刻。如果有人能解决这个问题,那将会让我头疼不已。感谢。

1 个答案:

答案 0 :(得分:1)

由于您提到AMD模块...如果您生成一系列AMD模块,您可以使用RequireJS并利用其对data-main属性的支持来启动您的应用程序:

<script src="require.js" data-main="MODULE_NAME_HERE"></script>

在配置RequireJS时还可以使用deps选项:

require.config({
  ...
  deps: ["MODULE_NAME_HERE"],
});

data-main采用单个模块名称,而deps采用模块列表。这些是通常用于避免生成额外script元素以启动模块加载的方法。

我不知道SystemJS的任何等价物。我在GitHub上的SystemJS问题中看到了一些关于data-main的来回,但看起来硬币翻转现在没有实现它。

如果在构建应用程序时已知需要加载的模块列表,则可以将Webpack将应用程序捆绑到一个脚本中。然后,只要加载该脚本,您的应用程序就会启动。