Description
note
There is no "discussion" enabled on this repo, so I am creating an issue to ask questions.
Question
Is there a way to add multiple controllers
directories and import them automatically?
Context
We have an internal reusable bundle to share logic between ours Symfony projects.
Here is the structure:
namespace | path |
---|---|
Bundle | lib/my-bundle/assets/controllers |
App | assets/controllers |
What should be a good approach
1.In the App controller.json add a way to import other bootstrap.js
Like:
{
"controllers": [ ],
"entrypoints": [
"../lib/my-bundle/assets/bootstrap.js"
]
}
2.Add multiple context when calling a startStimulusApp
Line 20 in d58dc50
What I have tried
Looking at Symfony UX how they import controllers, it uses packages.json
.
Trying to make it work for our reusable bundle I've ended up like this:
// lib/my-bundle/package.json
{
"name": "@my-bundle/standard",
"main": "assets/controllers/controller.js",
"types": "assets/controllers/controller.d.ts",
"symfony": {
"controllers": {
"user-form": {
"main": "assets/controllers/user-form_controller.ts",
"webpackMode": "eager",
"fetch": "eager",
"enabled": true
},
"other-form": {
//...
},
"another-form": {
//...
}
}
},
}
Problems
-
Error at compile, ask to enable TypeScriptLoader or it is already the case
warning
Error loading ./node_modules/@my-bundle/standard/assets/controllers/user-form_controller.ts
FIX To process TypeScript files:- Add Encore.enableTypeScriptLoader() to your webpack.config.js file.
-
We need to declare each controller is this file.
-
In the app project import each controller inside the
controller.json
. -
We have to declare a
main
controller andtypes
?
Activity
weaverryan commentedon Sep 19, 2023
Hi!
After calling startStimulusApp() for one directory, you get an Application object back. You can use the normal stimulus functionality to load further contexts - use this package https://github.com/hotwired/stimulus-webpack-helpers
I hope that helps!
cavasinf commentedon Sep 20, 2023
Hi @weaverryan,
Thanks for the link!
At the end, here's what I've put with full path:
I don't know why but,
when I use the bundle package name from the
package.json
I still have the webpack ts error..
package.js
lib/my-bundle/package.js
bootstrap.js