【问题标题】:Angular - How to import a module from a JS bundleAngular - 如何从 JS 包中导入模块
【发布时间】:2021-01-17 21:27:57
【问题描述】:

我正在尝试从位于 src/ 下的 vendor 子文件夹中生成的 Angular 库包中导入模块。

index.html

<head>
...
    <script type="text/javascript" charset="utf-8" src="./vendor/example/bundles/example.umd.js"></script>
    
</head>

尽管如此,我在我的app.module.ts 中导入模块时遇到了一些麻烦。请问您知道怎么做吗?

看来 Angular 库的 @angular/core 和 @angular/common peerDependencies 也应该捆绑在脚本中才能正常工作。

我将不胜感激任何形式的帮助

【问题讨论】:

    标签: javascript angular typescript polyfills angular-library


    【解决方案1】:

    您不应添加引用本地文件的 &lt;script&gt; 标记,因为此本地文件不会包含在构建中。

    改为使用angular.json 文件的scripts configuration section,如下所示:

    "scripts": [
        { "input": "src/vendor/example/bundles/example.umd.js" }
    ]
    

    这会将example.umd.js 文件嵌入到Angular 构建的专用文件中。由于它被打包为 UMD,因此将附加一个对象到 window,其中包含您要导入的库的 API。

    为了阻止 TypeScript 抱怨不存在的变量,只需添加:declare var example;(将 example 替换为全局对象的真实名称)。

    【讨论】:

    • 错误在这里重现:(global = global || self, factory(global.example= {}, global.ng.core, global.rxjs, global.ng2Stompjs, global.ng.common)); Uncaught TypeError: Cannot read property 'core' of undefined
    • 看来全局的ngrxjsng2Stompjs对象属性是undefined
    • 这意味着要导入一些依赖项以使您的库正常工作。您确定 example 不是应该导入到您的 Angular 模块之一的 Angular 库吗?
    • 你不应该尝试将此库作为 UMD 导入,而是作为带有 TypeScript 定义文件的 ESM 导入。理想情况下,如果此库在 NPM 上,请使用 npm i example 安装它
    • 它是 Angular 模块吗?它可以作为 ESM 包(不是 UMD)提供吗?
    猜你喜欢
    • 2020-01-30
    • 2013-12-28
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2013-07-29
    • 2016-07-30
    • 2014-07-14
    相关资源
    最近更新 更多