ember-learn / cli-guides

Step-by-step guides and tutorials for using the ember-cli to create apps and addons
https://cli.emberjs.com
MIT License
25 stars 76 forks source link

Document altering entry point (allowing ember addon and "normal" package usage). #116

Open rwjblue opened 5 years ago

rwjblue commented 5 years ago

In ember-cli (for a very very long time) it has been possible to have ember-cli use a different main entry point for the addon than what a normal require('my-package-name') would return.

The way to do this is to add an "ember-addon": { "main": "some-other-file.js" } to your package.json. Normal require invocation will look at the main entry point, and ember-cli will look at some-other-file.js.

One nice benefit of this is that if you make main be addon/index.js and ember-addon.main be index.js, "normal" node_module resolution rules apply for things in addon/index.js. This means that things like eslint-plugin-import and TypeScript can actual see and validate an import from the addon name (though not with nested paths).

For example, typescript (and eslint-plugin-import) would see that this is valid:

import Component from 'sparkles-component';

export default class extends Component {}

See https://github.com/rwjblue/sparkles-component/pull/23 as an example.

xg-wang commented 4 years ago

I think this should be a RFC and built into default addon blueprint, rather than teaching addon authors. ^^ For the making typescript happy part, this needs to be documented

rwjblue commented 4 years ago

Sure, seems totally fine to me.