summaryrefslogtreecommitdiffstats
path: root/modules/collect.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-09-09 22:31:43 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-09-13 20:55:29 +0200
commit85ba9bfffba9bfd0b095cb766f72700d4c211e31 (patch)
tree43b66efaafe4cb804234ca7273873ab949305799 /modules/collect.go
parent9df60b62f9c4e36a269f0c6e9a69bee9dc691031 (diff)
Add "hugo mod npm pack"
This commit also introduces a convention where these common JS config files, including `package.hugo.json`, gets mounted into: ``` assets/_jsconfig ´`` These files mapped to their real filename will be added to the environment when running PostCSS, Babel etc., so you can do `process.env.HUGO_FILE_TAILWIND_CONFIG_JS` to resolve the real filename. But do note that `assets` is a composite/union filesystem, so if your config file is not meant to be overridden, name them something specific. This commit also adds adds `workDir/node_modules` to `NODE_PATH` and `HUGO_WORKDIR` to the env when running the JS tools above. Fixes #7644 Fixes #7656 Fixes #7675
Diffstat (limited to 'modules/collect.go')
-rw-r--r--modules/collect.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/modules/collect.go b/modules/collect.go
index b82d395fd..8959572d6 100644
--- a/modules/collect.go
+++ b/modules/collect.go
@@ -18,6 +18,7 @@ import (
"fmt"
"os"
"path/filepath"
+ "regexp"
"strings"
"time"
@@ -382,6 +383,11 @@ func (c *collector) applyMounts(moduleImport Import, mod *moduleAdapter) error {
return err
}
+ mounts, err = c.mountCommonJSConfig(mod, mounts)
+ if err != nil {
+ return err
+ }
+
mod.mounts = mounts
return nil
}
@@ -549,6 +555,43 @@ func (c *collector) loadModules() error {
return nil
}
+// Matches postcss.config.js etc.
+var commonJSConfigs = regexp.MustCompile(`(babel|postcss|tailwind)\.config\.js`)
+
+func (c *collector) mountCommonJSConfig(owner *moduleAdapter, mounts []Mount) ([]Mount, error) {
+ for _, m := range mounts {
+ if strings.HasPrefix(m.Target, files.JsConfigFolderMountPrefix) {
+ // This follows the convention of the other component types (assets, content, etc.),
+ // if one or more is specificed by the user, we skip the defaults.
+ // These mounts were added to Hugo in 0.75.
+ return mounts, nil
+ }
+ }
+
+ // Mount the common JS config files.
+ fis, err := afero.ReadDir(c.fs, owner.Dir())
+ if err != nil {
+ return mounts, err
+ }
+
+ for _, fi := range fis {
+ n := fi.Name()
+
+ should := n == files.FilenamePackageHugoJSON || n == files.FilenamePackageJSON
+ should = should || commonJSConfigs.MatchString(n)
+
+ if should {
+ mounts = append(mounts, Mount{
+ Source: n,
+ Target: filepath.Join(files.ComponentFolderAssets, files.FolderJSConfig, n),
+ })
+ }
+
+ }
+
+ return mounts, nil
+}
+
func (c *collector) normalizeMounts(owner *moduleAdapter, mounts []Mount) ([]Mount, error) {
var out []Mount
dir := owner.Dir()