The answer to the question above is ember generate component component-name --pods --no-path
Maybe I should back up a bit.
I've been working on an ember project full time for about a year now. I definitely prefer the pods style file layout to the classic style.
If you're unfamiliar, classic style file structure looks like this:
app/ |-- components/ |-- tags.js |-- tags.hbs |-- controllers/ |-- post.js |-- models/ |-- post.js |-- routes/ |-- post.js |-- templates/ |-- post.js |-- app.js |-- index.html |-- router.js while pods looks like this:
app/ |-- components/ |-- tags.js |-- tags.hbs |-- post/ |--controller.js |--route.js |--template.js |-- app.js |-- index.html |-- router.js The pod structure organizes the file system by feature instead of by entity type which I think is much easier to reason about and navigate.
You can use the ember-cli to scaffold out files for:
- routes
- controllers
- templates
- ember-data files
The command ember generate entity-type feature-name would scaffold out the correct file in the correct directory. If you want to use the pod structure you have to pass the --pods option to the ember generate command.
ember generate route feature-name would generate a new route.js file inside the feature-name directory. If the directory didn't exist it would be created. This command will also generate a test file at tests/unit/feature-name/route-test.js
You can also update the .ember-cli config file like so
// .ember-cli { "usePods": true } If you try to pass the --pods arg with a "usePods": true config ember-cli will throw a warning that using both is deprecated. The rest of my examples will use the --pods flag.
The problem I had was trying to create a component but I didn't want the component.js file or its template.hbs file to be generated inside of a /components directory. Maybe this is a bad idea. If it is I'm sure the internet will tell me.
The --path option accepts a string as its argument. You can use it to pass a file path. The file path passed must be relative to the /app directory.
app/ |-- post/ |-- controller.js |-- route.js |-- template.js |-- app.js |-- index.html |-- router.js If you want to create an author-info component inside our post directory the ember-cli command would be
ember g component author-info --pods --path="post"
app/ |-- post/ |-- author-info/ |-- component.js |-- template.hbs |-- controller.js |-- route.js |-- template.js |-- app.js |-- index.html |-- router.js But what if I want to create a component at the same level as /post?
ember generate component my-component --pods --path=""
Just pass an empty string as the argument. That creates the file structure below.
app/ |-- my-component/ |-- component.js |-- template.js |-- post/ |-- author-info/ |-- component.js |-- template.hbs |-- controller.js |-- route.js |-- template.js |-- app.js |-- index.html |-- router.js There's also an alias for --path="". It's --no-path
ember generate component my-component --pods --no-path
Top comments (0)