Folder Structure

Packs a.k.a webpack entries

“Packs” is a special directory made only for webpack entry files so don’t put anything here that you don’t want to link in your views.

Source

You can put your app source under app/javascript folder or whatever you have configured in config/webpacker.yml.

Example

Let’s say you’re building a calendar app. Your JS app structure could look like this:

// app/javascript/packs/calendar.js

import 'calendar'
app/javascript/calendar/index.js // gets loaded by import 'calendar'
app/javascript/calendar/components/grid.jsx
app/javascript/calendar/styles/grid.sass
app/javascript/calendar/models/month.js
<%# app/views/layouts/application.html.erb %>

<%= javascript_pack_tag 'calendar' %>
<%= stylesheet_pack_tag 'calendar' %>

But it could also look a million other ways.

Namespacing

You can also namespace your packs using directories similar to a Rails app.

app/javascript/packs/admin/orders.js
app/javascript/packs/shop/orders.js

and reference them in your views like this:

<%# app/views/admin/orders/index.html.erb %>

<%= javascript_pack_tag 'admin/orders' %>

and

<%# app/views/shop/orders/index.html.erb %>

<%= javascript_pack_tag 'shop/orders' %>