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

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

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

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

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

b) перезагрузка браузера не работает в 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 Ответ

1 голос
/ 29 мая 2019

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

a) для того, чтобы активировать веб-пакет для включения ваших активов из шаблона .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 в качестве точки входа.

...