如何将Angular Elements与“ ng g库”方法混合使用?

时间:2019-03-25 16:46:54

标签: angular angular-cli ng-packagr angular-elements

您知道,“ ng g库”方法可以帮助我们创建可重用组件的库。但是,如果我希望通过Angular Elements的支持将那些组件编译为Web组件呢?不仅如此,库中的每个组件都将被编译到其自己的文件夹或JS文件中。如何配置开发环境以使我能够实现这一目标?

例如:

如果我创建一个Lib并添加一个自定义组件,我知道我可以对其进行编译,生成一系列文件夹,例如esm5,esm2015,fesm5等。现在,问题是:如何添加,让我们对我的库说30个自定义组件,然后在编译时,它将为每个文件夹创建一个文件夹,其中包含它们的Web组件版本...好像Angular Elements遍历了我的组件库并生成了Web组件版本每个人。

赞:

lib/
lib/custom/comp1
lib/custom/comp2
lib/custom/comp3
lib/custom/comp4

变成类似以下内容:

Dist/
Dist/custom/
Dist/custom/bundle
Dist/custom/esm5
Dist/custom/esm2015
Dist/custom/comp1_web_independend_component_version
Dist/custom/comp2_web_independend_component_version
Dist/custom/comp3_web_independend_component_version
Dist/custom/comp4_web_independend_component_version

我找到的最接近的解决方案是这样:

https://medium.com/@rahulsahay19/running-multiple-angular-elements-on-the-same-page-5949dac5523

我还请求Angular CLI团队提供帮助:

https://github.com/angular/angular-cli/issues/13999

1 个答案:

答案 0 :(得分:2)

ng build在内部使用webpack进行构建。因此,这个问题实际上分为两部分。

  1. 没有ng eject的情况下,如何利用内部webpackConfig并根据我们的需要对其进行自定义。
  2. 此用例所需的webpackConfig看起来像什么。

对于第1部分,那里有一个解决方案@angular-builders/custom-webpack。基本上,它允许您将一些额外的字段合并到内部webpackConfig中,并且仍然使用官方的“ @ angular-devkit / build-angular:browser”作为构建器。

现在,对于第2部分,您的用例只是webpack中的多条目多输出构建问题。解决方案非常简单。

const partialWebpackConfig = {
  entry: {
    'custom/comp1': '/path/to/src/lib/custom/comp1.ts',
    'custom/comp2': '/path/to/src/lib/custom/comp2.ts',
  },
  output: {
    path: path.resolve(__dirname, 'Dist'),
    filename: '[name].js'
  }
}

下面是设置此配置的分步说明。

  1. npm install @angular-builders/custom-webpack
  2. 在项目根目录中创建一个webpack.config.js
const path = require('path');
module.exports = {
  entry: {
    'custom/comp1': path.resolve(__dirname, 'src/lib/custom/comp1.ts'),
    'custom/comp2': path.resolve(__dirname, 'src/lib/custom/comp2.ts')
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js'
  }
}
  1. angular.json中编辑“ architect.build”字段:
{
  // ...
  "architect": {
    "build": {
      "builder": "@angular-builders/custom-webpack:browser",
      "options": {
        "customWebpackConfig": {
          "path": "./webpack.config.js",
        },
        // ...
  1. 运行ng build,应该会看到结果。

对于高级用法,值得一提的是@angular-builders/custom-webpack支持导出webpack config as a function以完全控制最终使用的webpackConfig。