Skip to content

Converts regular Ember.js components to `tagName: ''` components

License

Notifications You must be signed in to change notification settings

ember-codemods/tagless-ember-components-codemod

Folders and files

NameName
Last commit message
Last commit date
Nov 29, 2019
Oct 1, 2024
Jan 20, 2020
Oct 1, 2024
Oct 10, 2019
Oct 10, 2019
Oct 10, 2019
Oct 10, 2019
Apr 19, 2020
Oct 1, 2024
Oct 1, 2024
Oct 10, 2019
Jan 20, 2020
Oct 1, 2024
Oct 1, 2024
Oct 1, 2024

Repository files navigation

tagless-ember-components-codemod

Converts regular Ember.js components to tagName: '' components

This codemod is experimental and might break your app. Make sure to review the changes that it creates!

Usage

npx tagless-ember-components-codemod

Example

import Component from '@ember/component';

export default Component.extend({
  tagName: 'button',
  attributeBindings: ['disabled', 'disabled:aria-disabled'],
  classNames: ['custom-button'],
  classNameBindings: ['blue:blue:red'],
});
{{@text}}

will be migrated to:

import Component from '@ember/component';

export default Component.extend({
  tagName: '',
});
<button disabled={{disabled}} aria-disabled={{disabled}} class="custom-button {{if this.blue "blue" "red"}}">
  {{@text}}
</button>

Configuration

Paths

By default, tagless-ember-components-codemod will process components in the following folders relatively to project root:

app/components
addon/components

You may pass alternative paths or globs as arguments:

# process one component only
npx tagless-ember-components-codemod app/components/my-component.js

# process a component and all components under it's namespace
npx tagless-ember-components-codemod app/components/my-component.js app/components/my-component/

# process all components matching a glob
npx tagless-ember-components-codemod app/components/**/foo-*.js

Debug

Debug logging could be enabled by setting DEBUG environment variable to tagless-ember-components-codemod:

DEBUG=tagless-ember-components-codemod npx tagless-ember-components-codemod

Known Caveats

  • Due to the way jscodeshift works it sometimes removes empty lines between component properties, or adds new ones unexpectedly

  • Since click() and other event hooks don't work for tagless components, passing in something like @click=(action ...) also will not work anymore

  • Open Issues

License

This projects is released under the MIT License.