При добавлении Workbox InjectManifest с помощью workbox-webpack-plugin отсутствуют файлы сборки Hugo - PullRequest
0 голосов
/ 30 апреля 2019

Я не могу правильно настроить шаги сборки, чтобы включить все мои статические файлы при использовании Hugo, Webpack и workbox. Мне нужно добавить ресурсы, запустив webpack, но тогда мне не хватает сгенерированных Хьюго файлов, которые появляются в моем npm scipt после завершения webpack.

Приведенный ниже код создает только файл precache-manifest.json, содержащий ресурсы веб-пакета из конвейера.

То, что мне нужно, это предложить все те статические активы, которые предлагает Hugo build. Кажется, это проблема синхронизации, я хотел бы иметь дополнительный шаг сборки или просто скрипт, который добавит все статические файлы.

Полное репо https://github.com/AJONPLLC/ajonp

package.json

    "build": "rm -rf public && npm run build:webpack && npm run build:hugo",
    "build:hugo": "hugo -d ../public -s site -v",
    "build:webpack": "cross-env NODE_ENV=production webpack --config webpack.prod.js --hot --inline"

webpack.common.js

const webpack = require("webpack");
const path = require("path");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const AssetsPlugin = require("assets-webpack-plugin");

module.exports = {
  entry: {
    main: path.join(__dirname, "src", "index.js")
  },

  output: {
    path: path.join(__dirname, "public")
  },

  module: {
    rules: [
      {
        test: /\.((png)|(eot)|(woff)|(woff2)|(ttf)|(svg)|(gif))(\?v=\d+\.\d+\.\d+)?$/,
        loader: "file-loader?name=/[hash].[ext]"
      },

      {test: /\.json$/, loader: "json-loader"},

      {
        loader: "babel-loader",
        test: /\.js?$/,
        exclude: /node_modules/,
        query: {cacheDirectory: true}
      },

      {
        test: /\.(sa|sc|c)ss$/,
        exclude: /node_modules/,
        use: ["style-loader", MiniCssExtractPlugin.loader, "css-loader", "postcss-loader"]
      }
    ]
  },

  plugins: [
    new webpack.ProvidePlugin({
      fetch: "imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch"
    }),

    new CopyWebpackPlugin([
      {
        from: "./src/fonts/",
        to: "fonts/",
        flatten: true
      }
    ]),

    new CopyWebpackPlugin([
      {
        from: "./node_modules/@ionic/core/",
        to: "ionic/core/",
        ignore: ['*.ts', '*.scss', '*e2e.js'],
        flatten: false
      }
    ]),
    new AssetsPlugin({
      filename: "webpack.json",
      path: path.join(process.cwd(), "site/data"),
      prettyPrint: true
    })
  ]
};

webpack.prod.js

const merge = require("webpack-merge");
const TerserPlugin = require('terser-webpack-plugin');
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const common = require("./webpack.common.js");
const {InjectManifest, GenerateSW} = require('workbox-webpack-plugin');

module.exports = merge(common, {
  mode: "production",

  output: {
    filename: "[name].[hash:5].js",
    chunkFilename: "[id].[hash:5].css"
  },

  optimization: {
    minimizer: [
      new TerserPlugin({
        cache: true,
        parallel: true,
        sourceMap: true
      }),

      new MiniCssExtractPlugin({
        filename: "[name].[hash:5].css",
        chunkFilename: "[id].[hash:5].css"
      }),

      new OptimizeCSSAssetsPlugin({}),
    ]
  },
  plugins: [
    new InjectManifest({
      swSrc: './src/sw.js',
      exclude: [/\.md$/, /\.xml$/, /\.txt$/, /\.json$/, /\.keep$/, /\.DS_Store$/, '404.html', '404/index.html']
    }),
  ]
});
...