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)
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
andserver
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:
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
@jkc1996 today you can usage https://github.com/meltedspark/angular-cli-builders https://github.com/Angular-RU/angular-cli-webpack
+1
@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 forng-packager
if it doesn’t work out of the box.You’re even more welcome to create a PR.