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