Hugo Release 0.78.0

Hugo 0.78.0: Full Hugo Modules Support in js.Build

Resolve JavaScript imports top-down in the layered filesystem, pass parameters from template to JS, new JS intellisense helper, improved JS build errors.

November 3, 2020

Go to Hugo Releases for the release downloads.

Featured Image for Hugo 0.78.0: Full Hugo Modules Support in js.Build

This release finally brings full Hugo Modules support to js.Build, curtsy of he new plugin API in the really, really fast ESBuild by @evanw.

Some notes on the improvements in this release:

  • Now js.Build fully supports the virtual union filesystem in Hugo Modules. Any import inside your JavaScript components will resolve starting from the top component mount inside /assets with a fallback to the traditional “JS way” (node_modules etc.)
  • You can now pass configuration data from the templates to your scripts via a new params option.
  • Hugo now writes a jsconfig.js file inside /assets (you can turn it off) with import mappings to help editors such as VS Code with intellisense/navigation, which is especially useful when there is no common root and the source lives inside some temporary directory.
  • We have also improved the build errors you get from js.Build. In server mode you will get a preview of the failing lines and in the console you will get a link to the location.

Read more about this in the documentation, but a short usage example would look like:

In the template:

{{ $js := resources.Get "js/main.js" | js.Build (dict "params" (dict "api" "https://example.org/api" ) }}

And then in a JavaScript component:

import * as params from '@params';

// Wil resolve to one of `hello.{js,ts,tsx,jsx}` inside `assets/my/module`.
import { hello } from 'my/module/hello';

var api = params.api;

hello();

Changes