Angular 库无法在包中包含第三方库

Posted

技术标签:

【中文标题】Angular 库无法在包中包含第三方库【英文标题】:Angular Library is not able include third party library in the bundle 【发布时间】:2019-08-05 04:55:54 【问题描述】:

我的要求是创建具有自己视图的库,并且根据用户的配置,该库将从 AWS S3 存储桶中获取并包含在运行时的最终应用程序中。 See this example。我可以在主应用程序中添加dist/library/bundles/library.lib.umd.js 并将其显示给用户。但是当我尝试使用uuidmomentng2-dragula 等第三方库时,ng build 命令在最终包中不包含任何第三方库。我收到类似警告

'ng2-dragula' is imported by ..\..\dist\torab-custom-lib\esm5\lib\custom-lib.service.js, but could not be resolved – treating it as an external dependency

在构建库和我的应用程序时,projects/library 存在显示

ERROR in dist/torab-custom-lib/lib/custom-lib.component.d.ts(2,32): error TS2307: Cannot find module 'ng2-dragula

我想要在最终包中包含我使用的任何第三方库,因为我无法在运行时安装/导入它们。我试过了

"bundledDependencies": [
    "ng2-dragula"
  ]

package.json 建议here 和

"embedded": [
    "ng2-dragula"
      ],

在我的ng-package.json 中建议here。这是我的环境信息

Angular CLI: 7.1.4
Node: 11.10.0
OS: win32 x64
Angular: 7.1.4
... animations, cli, common, compiler, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                            Version
------------------------------------------------------------
@angular-devkit/architect          0.11.4
@angular-devkit/build-angular      0.13.5
@angular-devkit/build-ng-packagr   0.11.4
@angular-devkit/build-optimizer    0.13.5
@angular-devkit/build-webpack      0.13.5
@angular-devkit/core               7.1.4
@angular-devkit/schematics         7.1.4
@angular/compiler-cli              7.2.9
@ngtools/json-schema               1.1.0
@ngtools/webpack                   7.3.5
@schematics/angular                7.1.4
@schematics/update                 0.11.4
ng-packagr                         4.7.1
rxjs                               6.3.3
typescript                         3.1.6
webpack                            4.29.0

请帮忙。如果有不同的方式在应用程序的运行时加载第三方库,也请提出建议。

【问题讨论】:

我认为您需要使用来自bundledDependenciesnpm packnpm publish。这就是 ng-packgr 文档的建议 【参考方案1】:

构建库后,使用 rollupjs 从 fesm5 文件中捆绑第三方库。

这是我的 rollup.config :

import resolve from 'rollup-plugin-node-resolve';
import sourcemaps from 'rollup-plugin-sourcemaps';
import commonjs from 'rollup-plugin-commonjs';

export default 
    plugins: [
       resolve(), 
       sourcemaps(),
       commonjs(
        namedExports:  
            'node_modules/chart.js/dist/Chart.js': ['Chart' ]
        
      )
   ],
   onwarn: () =>  return ,
   output: 
       format: 'umd',
       name: 'mylib',
       globals: globals,
       sourcemap: true,
       amd:  id: 'mylib' 
    

然后我使用这个汇总命令:

 rollup -c rollup.config.js -i .\dist\mylib\fesm5\mylib.js -o .\dist\mylibwiththirdparty.umd.js

【讨论】:

以上是关于Angular 库无法在包中包含第三方库的主要内容,如果未能解决你的问题,请参考以下文章

如何不在我的柯南包中包含源文件?

如何在 C++ 窗口中包含第三方库?

使用亚马逊弹性mapreduce服务时如何在hadoop中包含第三方库

在 wildfly jar 中包含第三方库(keycloak SPI)

如何使用 webpack 在 index.html 中包含第三方库,如 jquery 和 bootstrap-table?

如何在Android库AAR中包含第三方JAR,而无需合并代码