angular-cli: ng eject not available at Angular 6.0.0

This is currently an undocumented breaking change for those migrating from 5 to 6, ng eject is temporarily disabled at v6.0.0.

Versions

Angular CLI: 6.0.0
Node: 9.11.1
OS: darwin x64
Angular: 6.0.0
... animations, cli, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.6.0
@angular-devkit/build-angular     0.6.0
@angular-devkit/build-optimizer   0.6.0
@angular-devkit/core              0.6.0
@angular-devkit/schematics        0.6.0
@ngtools/webpack                  6.0.0
@schematics/angular               0.6.0
@schematics/update                0.6.0
rxjs                              6.1.0
typescript                        2.7.2
webpack                           4.6.0

Repro steps

  • Try running ng eject

Observed behavior

Running ng eject resulted in the following message:

The 'eject' command has been temporarily disabled, as it is not yet compatible with the new
angular.json format. The new configuration format provides further flexibility to modify the
configuration of your workspace without ejecting. Ejection will be re-enabled in a future
release of the CLI.

If you need to eject today, use CLI 1.7 to eject your project.

Reference: https://github.com/angular/angular-cli/blob/master/packages/angular/cli/commands/eject.ts

Desired behavior

I wasn’t aware of this issue until after I upgraded, note that I did read the release notes. Since ng eject has been removed for now, I expected supporting documentation:

  • Provide information on this in the README as a breaking change. This would help to let folks know about this issue before they attempt to migrate.

  • Provide guidance in the wiki: https://github.com/angular/angular-cli/wiki.

Mention any other details that might be useful (optional)

Possibly related to another issue https://github.com/angular/angular-cli/issues/10593

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Reactions: 88
  • Comments: 36 (3 by maintainers)

Most upvoted comments

Yes, at this point Angular CLI is dangerously bad to rely on. If at some point some dependency breaks or you need some customization that angular CLI doesn’t support, then you are screwed. And CLI should help you do hard, repetitive, standardized work, not lock you in. That’s why I don’t recommend anybody, apart from quick demos, to use CLI in their projects.

Also, “Eject” feature is kind of nice, but I think it shows the fundamental flaw with Angular CLI - it’s either CLI or plain webpack. It doesn’t enhance existing webpack pipeline, but tries to replace it with it’s own high level construct, and that creates a lot of friction, lock-in, unnecessary compatibility problems etc, and in the end defeats it’s own purpose.

@meltedspark First of all thank you for your contribution. On the other hand I am totally disappointed on the silence about this breaking changes. I am not going to adopt this version of Angular for the time being. And I am not going to adopt the million-th piece of javascript in addition to the 67K file for an empty application. Again, thanks but all of this is terrible.

eject functionality is no longer available in the latest version (6.x+). For custom webpack configurations the following unofficial add-on is a suggested solution: https://github.com/manfredsteyer/ngx-build-plus

This basically means that it’s not possible to use angular 6 with native plugins (which require a specific webpack loader) … too bad 😦

And I thought angular team cared about community. Silently killing a crucial extension point (although a flawed one), and outsourcing to unofficial (read unsupported) hacklibrary without notice and no community discussion. That’s just great… This is a classic example why frameworks are nice only while they don’t screw anything up. And more often than not, they all at some point do it. +1 reason to start looking at vue/react, thanks.

+1

Hi everyone, I really hope the CLI will be extensible in the nearest future.
For the time being I’ve created a small library that allows to extend the existing browser and server targets with a custom webpack config.
It worked for me (I needed node-loader for native modules and also some externals), hope it can help someone else.
You can find the example with native modules here.
More details in the related Medium story.

I think it would still be good to be able to eject. We want to follow whatever webpack convention that the default angular-cli uses, without really opting into angular-cli, because it is too opinionated and unflexible.

If there is no eject command maybe provide some info on the kinds of webpack plugins Angular uses.

Hi guys, is there an ETA on solving the missing ng eject option issue?

Please note that the linked project above is not a hack. It is currently using an experimental extension API that will become stable in 8.0 that allows extensive customization and extension to the build process. Eject is a one-way process and pushes full responsibility of upkeep and maintenance onto the application developer. In contrast, the package above allows the inclusion of additional webpack plugins or loaders while still leveraging the existing CLI experience and improvements. In addition, if the goal of a project is for a fully standalone webpack configuration, there are a multitude of Webpack based starter projects available to cater to that need as well.

https://github.com/gdi2290/angular-starter has been updated to Angular 6, I think this’s the best solution for now.

@tinganho I agree with you, the CLI is unflexible . This have been discussed here #1656. @hansl locked the conversation which I think goes against community driven projects. @hansl would you reconsider re-opening the conversation so that the community can build/find/discuss CLI alternative? I personally use https://github.com/gdi2290/angular-starter which is CLI free.

@andygup https://github.com/Angular-RU/angular-cli-webpack This package provides an opportunity to modify @angular/cli project’s webpack configuration without “ejecting”.

Are there any updates Wether this will be back in cli 8 or not?

@meltedspark My boss ended up designing another solution for now, so I won’t be able to make a PR this time around. But when the time comes, I’ll definitely have custom-webpack in mind 😃

BTW thanks so much for making an awesome extension 😃

@clydin nice to hear! That sounds like a more solid solution, I hope that the API is wide enough so we can leverage it with confidence. The problem that remains is that:

  1. This should have been deprecated until a viable solution is provided and not break people’s apps.
  2. Removing it in v6 and reintroducing it as stable in v8 is a 12 month gap. Angular was supposed to be rock solid enterprise ready, no (read - limited) breaking change framework (with all the talk of pushing every commit through all tests in all google angular apps etc…), but this doesn’t look like it.

Anyway, I hope that this will get better in the future 😃 thanks!

@biiiipy frankly, any change they make could screw all the things. And no, you cannot stay stable to a given version because npm audit still warns all of us that is extremely dangerous not to move on the newest possible versions. Checkmate …

any update here?🤷🏻‍♂️

Angular CLI: 6.0.8 Need custom webpack config feature!

I’ve moved to https://github.com/meltedspark/angular-cli-builders, seems a good solution

@vance ng eject is not coming back, so official or not, you’ll still have to use one of the 3d party builders.
I can tell you that Angular team is very cooperative in this term so likely the new versions of 3d party builders will be released at the same time Angular 8 will be.
From what I see, there is nothing to worry about.

@MartinJHammer I can’t tell you about ng-packagr but from what it looks like, @angular-builders/custom-webpack is more capable than ngx-build-plus. At least for now.
Mostly from webpack plugins perspective but not only (for example it supports different merge strategies).
Anyways my intention is to support this library as a long term alternative to ng eject so you are welcome to open a feature request for ng-packager if it doesn’t work out of the box.
You’re even more welcome to create a PR.