Jul 6, 2020

Stop Extending Ember's Built In Components


One of the existential problems facing Ember today is about how to move past Ember.Component and lean into the leaner GlimmerComponents.

One of the things stopping this from happening is that Ember provides three built-in components built on top of Ember.Component:

  1. <Input />
  2. <TextArea />
  3. <LinkTo />

The Ember.Component class has public APIs that enable end users to extend functionality: (namely .extend, .reopen, and reopenClass). GlimmerComponent does not have these APIs so these components cannot be refactored without breaking changes. And because these built in components cannot be rewritten away, the framework must continue to ship the Ember.Component class and all its dependencies. It cannot make a case for deprecating or even shaking out Ember.Component until it can remove its own internal usage of Ember.Componnet, and move the Guides and official Tutorial away from these classes.

To workaround these issues, significant effort is being put into treeshaking (on a technical level) and in a conversation about how to deprecate things from Ember with the least amount of disruption to existing apps. Both of these efforts are important and necessary, but it is also important for app developers to get ahead of the curve.

Step 1 is to stop extending the built in components!

If you find your app or addon extends these components, please comment on this issue with your use case and any road blocks to refactoring away from your existing solution.


If you like this post, please share it on Twitter. You can also email me email me or subscribe to my RSS feed.