Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLI doesn't allow custom builder to pass additional extensions when building app for i18n extractions #27264

Open
kamilchlebek opened this issue Mar 12, 2024 · 2 comments

Comments

@kamilchlebek
Copy link

kamilchlebek commented Mar 12, 2024

Command

extract-i18n

Description

We're in the process of migrating from webpack to esbuild.
To provide custom esbuild plugins we decided to use custom builder (https://github.com/just-jeb/angular-builders).

It went smooth until we realised that extract-i18 no longer works. It ends successfully but messages.xlf is empty.

It turned out that angular checks builderName to choose which bundler to use.

To fix that I decided to implement custom extract-i18n builder that will trick angular/cli and force using esbuild -
just-jeb/angular-builders#1711

For the record nrwl/nx did the same - nrwl/nx#21802

The issue is that angular/cli will not let us pass any extensions during i18n application compilation.

for await (const result of build(buildOptions as any, context, { write: false })) {

It may lead to inconsistency between build and extract flow, which I suppose may lead to issues with i18n.

Describe the solution you'd like

We should be able to pass custom extensions as for regular app building.

(bonus) would be really nice if these if (builderName === ... are replaced by something that is custom builder friendly 🙏

Describe alternatives you've considered

Alternatively we could rewrite whole extract-i18n builder, but as 95% of the code would be the same - it seems pointless

@kamilchlebek kamilchlebek changed the title CLI will not allow custom builder to pass additional extensions when building app for i18n extractions CLI doesn't allow custom builder to pass additional extensions when building app for i18n extractions Mar 12, 2024
@clydin
Copy link
Member

clydin commented Mar 14, 2024

This is definitely something we can evaluate for inclusion.

Would it be possible to provide some additional information in what is being customized for the build process with the builder?

@kamilchlebek
Copy link
Author

Sure, we use both middlewares and plugins.

Middlewares are used mainly for proxy configuration (and serving different themes for development purposes, there's an issue related to that, see: #27110)

Plugins in general use options.define to pass some additional context to your apps, as: version, build id, supported browsers (browserlist regex), list of supported locales (extracted from angular.json).

I think once angular allows passing custom middlewares/plugins directly to default builders from @angular-devkit/build-angular the main issue becomes obsolete. It seems it's almost done, but not exposed to @angular-devkit/build-angular public API.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants