Angular Elements:包含一次tha角核

问题描述 投票:1回答:2

Angular Elements是打包为custom elements的Angular组件。每个Angular Elements都会附带角铁芯。如果在标准的html页面中,我包含5个Angular Elements组件,则此页面下载的角度内核数是其的5倍。

有一种方法可以包含一个角核,仅下载组件代码?

angular custom-element angular-elements
2个回答
4
投票

这个问题应该在常春藤渲染器最终发布时消除(https://is-angular-ivy-ready.firebaseapp.com/#/status-状态在最近几个月中没有改变...),因为它应该对所有未使用的代码进行树状交换,从而减少每个元素的大小。

同时,您可以使用https://github.com/manfredsteyer/ngx-build-plus#advanced-example-externals-and-angular-elements从自定义元素构建中排除基础软件包,并在基础应用程序中提供基础软件包,例如,角核,rxjs等仅加载一次。

编辑:请确保在主应用程序之后加载自定义元素(通过使用延迟或动态加载它们),以确保加载了所需的基本脚本。您无需添加项目自述文件中提到的umd库,只需确保您的基本应用程序具有所有这些脚本(如果尚未导入,则将它们添加到angular.json中)


2
投票

您可以使用ngx-build-plus并使其成为外部对象。阅读此:https://www.npmjs.com/package/ngx-build-plus

这里是最终的html看起来像:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ElementsLoading</title>
<base href="/">

<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>

<!-- Consider putting the following UMD (!) bundles -->
<!-- into a big one -->

<!-- core-js for legacy browsers -->
<script src="./assets/core-js/core.js"></script>

<!-- Zone.js -->
<!-- 
    Consider excluding zone.js when creating
    custom Elements by using the noop zone.
-->
<script src="./assets/zone.js/zone.js"></script>


<!-- Polyfills for Browsers supporting 
        Custom Elements. Needed b/c we downlevel
        to ES5. See: @webcomponents/custom-elements
-->
<script src="./assets/custom-elements/src/native-shim.js"></script>

<!-- Polyfills for Browsers not supporting
        Custom Elements. See: @webcomponents/custom-elements
-->
<script src="./assets/custom-elements/custom-elements.min.js"></script>


<!-- Rx -->
<script src="./assets/rxjs/rxjs.umd.js"></script>

<!-- Angular Packages -->
<script src="./assets/core/bundles/core.umd.js"></script>
<script src="./assets/common/bundles/common.umd.js"></script>
<script src="./assets/platform-browser/bundles/platform-browser.umd.js"></script>
<script src="./assets/elements/bundles/elements.umd.js"></script>

<!-- Calling Custom Element -->
<custom-element></custom-element>

</body>
</html>

我能够做到这一点,并能够外部化角度模块。但是我想知道如何外部化我在angular中创建的自定义库?我看到的一件事是Angular创建了UMD包,其中ng.core,ng.common被定义为全局变量(以便我可以通过window对象访问它们)。我尝试使用rollupjs创建umd包,但它确实创建了任何全局变量,就像对角组件一样。我被困在这里寻找想法。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.