FSbox is a packd.Box
implementation that uses go 1.16's io/fs
package. It facilitates the packing of your assets, templates and other things into the Buffalo binary using the new embed
and io/fs
libraries and ditching Packr
or any other third-party tool.
On development mode (GO_ENV == development
or empty) FSbox falls back to open files using os.Open
to provide the ability to do changes in those files without the need to recompile the app, facilitating an agile and iterative approach while developing.
You need to have a variable that embeds your templates and assets into the binary.
// embed.go
package app
var (
//go:embed templates public migrations
fsys embed.FS
// The boxes your app may need.
Assets = fsbox.New(fsys, "public")
Templates = fsbox.New(fsys, "templates")
Migrations = fbox.New(fsys, "migrations")
)
These two boxes will be used in your Buffalo application for plush templates and assets serving as you can see next:
...
// Adding custom partialFeeder
helpers["partialFeeder"] = app.Templates.FindString
// Render engine initialization
Engine = render.New(render.Options{
HTMLLayout: "application.plush.html",
TemplatesBox: app.TemplatesBox,
AssetsBox: app.AssetsBox,
...
})
...
Defining the partialFeeder is an important step since the default partialFeeder that Buffalo uses adds an underscore prefix to partials, and the embed functionality seems not to support embedding underscore prefixed files.
// Serving assets
bapp.ServeFiles("/", app.AssetsBox)
Yes, however this could imply some changes in your application configuration and packages.