【问题标题】:Angular Ivy compiler and webpackAngular Ivy 编译器和 webpack
【发布时间】:2019-10-31 18:34:15
【问题描述】:

我们想在 webpack 中使用新的 Angular 8 Ivy 编译器。我们不使用 Angular CLI。这可能吗?如何才能做到这一点?我似乎找不到有关此要求的信息。

【问题讨论】:

  • 你能告诉我们你是如何在没有 Ivy 的情况下配置 webpack 构建的吗?
  • 不同之处在于在其余构建之前运行 ngcc 编译器

标签: angular webpack angular-builder angular-ivy


【解决方案1】:

要了解该怎么做,您必须深入研究 Angular CLI 代码并查看它们在哪里使用 enableIvy 标志。

我没有看到你的 Webpack 配置,但我猜你正在使用 AngularCompilerPlugin
如果是这种情况,那么您必须在compilerOptions 中提供enableIvy

有关更多详细信息,请查看here(定义标志的位置)、here(定义插件选项的位置)和here(初始化插件的compilerOptions)。

插件配置可能如下所示:

... // The rest of your webpack config
plugins: [
  new AngularCompilerPlugin({
    compilerOptions: {
      enableIvy: true,
      ...// the rest of compiler options
    }
    ...// The rest of options you provide to AngularCompilerPlugin
  })
  ...// The rest of your plugins 
]

我不确定他们是否在其他地方使用了这个标志,但这个地方是必须的,它可能会给你想要的东西。

无论如何,如果您不想让自己头疼,我建议您坚持使用 Angular CLI。
否则你将不得不经常访问他们的代码库。

如果您使用的是 Webpack,那么很可能使用 Angular CLI 和 Custom Webpack Builder 来完成您需要的工作。
如果您在配置构建器时遇到困难,非常欢迎您访问 Angular Builders Slack channel

【讨论】:

  • 好的,谢谢。我们将尝试使用 Angular 编译器插件,并且我们计划在 Angular 9 发布时尝试使用 Angular cli 的 Angular 构建器。所以我可能有一些问题,因为我们做了很多特殊的事情 :) 请注意,它涉及许多应用程序的企业范围架构。
  • 没问题,有任何问题可以在 Slack 上找我。
  • 刚刚注意到 Angular 8 不适用于 Ivy。您必须切换到 Angular@next 以避免 ngcc 错误。
  • 有一个实验性的enableIvy 标志,你可以在你的tsconfig 选项中enable
【解决方案2】:

Ivy 尚未正式发布。使用 Angular 8 版,您可以选择使用 CLI 进行预览。

见:https://blog.angular.io/a-plan-for-version-8-0-and-ivy-b3318dfc19f7

Angular 应该在版本 9 中完全切换到 Ivy。届时您可能会找到更多关于使用 Ivy 和自定义 webpack 配置的文档。

在此之前,我会提出以下建议:

  1. Angular Builders 存储库上打开一个新问题并在那里提出这个问题。 Angular 构建者是 go-to ng eject alternative,当涉及到此类问题时,他们可能会比堆栈溢出的平均 joe 有更多的答案。
  2. 在 Angular 存储库上打开一个问题并在那里提出这个问题。

【讨论】:

  • 我们根本没有使用 Angular CLI。它是纯粹的 webpack。我们尝试使用 Angular 构建器,但问题是我们有一个 CDN 系统,其中所有库都定义为外部库。你的意思是在 Angular 9 中我们将开箱即用地使用 Ivy 吗? @angular/compiler npm 包呢?
  • 我知道您根本没有使用 Angular CLI。如果您阅读我上面链接的官方 Angular 文章,您会看到是的,Angular 预计 Ivy 将在版本 9 中开箱即用。我并不是建议您使用 Angular 构建器 - 我是说编写 Angular 的人构建者在不使用 CLI 的情况下使用 Angular 方面经验丰富,他们可能会回答您的问题。我建议你在他们的 repo 上问这个问题。
【解决方案3】:

Ivy 仍处于预览模式。如果您想尝试按照以下屏幕截图中的步骤操作,

官方文档中有提到,https://angular.io/guide/ivy#using-ivy-in-an-existing-project

【讨论】:

  • 看来他根本不想使用 Angular CLI
  • 我们有一个现有的 webpack 设置,没有 Angular CLI。我们将所有库定义为外部包 (CDN)。除了我们想使用 Ivy 之外,我们现在正在移动到 8,这进展顺利。似乎没有其他人有类似应用程序设置的情况。
  • Angular CLI 是一个开发依赖项,用作开发人员工具的一部分,在许多方面只是 webpack 的一个巨大扩展(我知道还有很多其他功能)......我猜如果您使用的是 webpack,我不明白为什么不能使用 CLI。它们都是 npm 包。
  • 原因是 CDN 脚本标签和外部必须符合 es6 导入导出语法。 Angular CLI 不支持 webpack 提供的外部方式,您可以在其中定义一个模块以标记为外部,然后将其替换为全局变量。 Angular CLI 期望本地存在的所有源都作为一个整体构建。
猜你喜欢
  • 2022-01-11
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 2020-05-12
相关资源
最近更新 更多