Как загрузить ресурсы из шаблона.pug с помощью html-webpack-plugin

Я прохожу курс CSS и устаю набирать похожие HTML-структуры вручную, поэтому я подключил шаблоны pug и webpack-dev-server для его обслуживания.

ПРИМЕЧАНИЕ: моя точка входа .scss файл не .js

У меня есть две проблемы:

а) только файлы из css загружаются в папку сборки, но изображения и svg, на которые есть ссылки в src атрибуты в .pug Шаблон пропущен.

б) перезагрузка браузера не работает в webpack-dev-server

мой webpack.config.js:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
  entry: './sass/main.scss',
  output: {
    path: path.resolve(__dirname, 'build'),
    filename: 'css/style.css',
  },
  mode: 'development',
  module: {
    rules: [
      {
        test: /\.pug$/,
        use: ['pug-loader'],
      },
      {
        test: /\.(css|sass|scss)$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: [
            {
              loader: 'css-loader',
            },
            {
              loader: 'postcss-loader',
            },
            {
              loader: 'sass-loader',
            },
          ]
        })
      },
      {
        test: /\.(gif|png|jpe?g|svg)$/i,
        use: [
          // {
          //   loader: 'file-loader',
          //   options: {
          //     name: 'img/[name].[ext]',
          //   }
          // },
          {
            loader: 'url-loader',
            options: {
              limit: 10000,
              publicPath: "../",
              name: 'img/[name].[ext]',
            }
          }
        ],
      }
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './test.pug',
      filename: 'index.html',
      favicon: 'img/favicon.png',
      cache: false,
    }),
    new ExtractTextPlugin('css/style.css'),
  ],
  devServer: {
    contentBase: path.join(__dirname, 'build'),
    compress: true,
    open: 'firefox',
    port: 8080,
    hot: true,
  },
};

Пожалуйста, порекомендуйте.

1 ответ

Кажется, эта тема никому не интересна, но я нашел решение, и вот оно:

а) для запуска веб-пакета, чтобы включить ваши активы из .pug Шаблон в граф зависимостей требует их:

img(
    alt="Your image"
    src=require("./img/image.jpg")
)

Однако вы не сможете сделать то же самое с SVG, если получите доступ ко всем из них из одного спрайта. Так как:

svg
   use(xlink:href=require("./img/sprite.svg#icon"))

сгенерирует исключение, сказав, что не удалось найти файл с таким именем.

Так что мне потребовался весь спрайт в начале шаблона require("./img/sprite.svg")а затем просто указал значки обычным способом:

svg
   use(xlink:href="./img/sprite.svg#icon")

б) Что касается перезагрузки, это было не так просто. Я играл с MiniCssExtractPlugin варианты, но все еще не мог заставить это перезагрузить. В итоге я взял идеи из этой сути и этого репо. Пришлось немного изменить структуру моего проекта и создать index.js в качестве точки входа, хотя.

Другие вопросы по тегам