diff --git a/common/hugio/copy.go b/common/hugio/copy.go index 2b756cb44..be4506f4c 100644 --- a/common/hugio/copy.go +++ b/common/hugio/copy.go @@ -26,28 +26,29 @@ import ( // CopyFile copies a file. func CopyFile(fs afero.Fs, from, to string) error { - sf, err := os.Open(from) + sf, err := fs.Open(from) if err != nil { return err } defer sf.Close() - df, err := os.Create(to) + df, err := fs.Create(to) if err != nil { return err } defer df.Close() _, err = io.Copy(df, sf) - if err == nil { - si, err := os.Stat(from) - if err != nil { - err = os.Chmod(to, si.Mode()) - - if err != nil { - return err - } - } - + if err != nil { + return err } + si, err := fs.Stat(from) + if err != nil { + err = fs.Chmod(to, si.Mode()) + + if err != nil { + return err + } + } + return nil } diff --git a/hugolib/hugo_modules_test.go b/hugolib/hugo_modules_test.go index c3358a0c2..87cddf086 100644 --- a/hugolib/hugo_modules_test.go +++ b/hugolib/hugo_modules_test.go @@ -201,14 +201,16 @@ JS imported in module: | b, clean := newTestBuilder(t, "") defer clean() - b.WithSourceFile("package.json", `{ + const origPackageJSON = `{ "name": "mypack", "version": "1.2.3", "scripts": {}, "dependencies": { "moo": "1.2.3" } -}`) +}` + + b.WithSourceFile("package.json", origPackageJSON) b.Build(BuildCfg{}) b.Assert(npm.Pack(b.H.BaseFs.SourceFs, b.H.BaseFs.Assets.Dirs), qt.IsNil) @@ -244,6 +246,10 @@ JS imported in module: | "version": "1.2.3" }` }) + + // https://github.com/gohugoio/hugo/issues/7690 + b.AssertFileContent("package.hugo.json", origPackageJSON) + }) t.Run("Create package.json, no default, no package.json", func(t *testing.T) { @@ -281,7 +287,9 @@ JS imported in module: | "name": "myhugosite", "version": "0.1.0" }` + }) + }) } diff --git a/modules/npm/package_builder.go b/modules/npm/package_builder.go index 23aac7246..c0a5b0dad 100644 --- a/modules/npm/package_builder.go +++ b/modules/npm/package_builder.go @@ -18,6 +18,8 @@ import ( "fmt" "io" + "github.com/gohugoio/hugo/common/hugio" + "github.com/gohugoio/hugo/hugofs/files" "github.com/pkg/errors" @@ -51,7 +53,12 @@ func Pack(fs afero.Fs, fis []hugofs.FileMetaInfo) error { if err != nil { // Have a package.json? fi, err = fs.Stat(packageJSONName) - if err != nil { + if err == nil { + // Preserve the original in package.hugo.json. + if err = hugio.CopyFile(fs, packageJSONName, files.FilenamePackageHugoJSON); err != nil { + return errors.Wrap(err, "npm pack: failed to copy package file") + } + } else { // Create one. name := "project" // Use the Hugo site's folder name as the default name.