Контекст проблемы
У меня есть веб-пакет для компиляции моего машинописного текста в javascript. Автоматическая перезагрузка работает, когда я меняю свой машинописный код. Тем не менее, webpack не смотрит мой статический html-файл.
.
├── dist
│ ├── index.html
│ └── style.css
├── src
│ └── index.ts
└── webpack.config.js
Проблема в том, что мне нужно внести несколько изменений в мой index.html
, и веб-пакет не обнаруживает эти изменения автоматически. И, если я обновлю html-страницу, она, похоже, сломает webpack-dev-server.
Ожидаемый результат
Я хочу, чтобы все было в папке src
, и когда я запускаю webpack
, в моей папке dist
есть полностью рабочий статический сайт. То есть:
. .
├── dist ├── dist
├── src │ ├── index.html
│ ├── index.html │ ├── bundle.js
│ ├── index.ts npx webpack -> │ └── style.css
│ └── style.css ├── src
└── webpack.config.js │ ├── index.html
│ ├── index.ts
│ └── style.css
└── webpack.config.js
Файлы в папке dist
могут содержать хэшированные имена файлов. Я пока не беспокоюсь об этом шаге. Я ожидаю, что webpack проверит мои файлы и убедится, что они ссылаются на правильные ресурсы. Поэтому, если бы webpack дал style.css
хешированное имя, href в index.html
был бы обновлен.
Токовый выход
Мое текущее решение выводит как index.html
, так и bundle.js
, но Я не могу заставить его скопировать style.css
в папку dist
. Мой текущий webpack.config.js
выглядит так:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: './src/index.ts',
devtool: 'inline-source-map',
mode: 'development',
devServer: {
contentBase: './dist'
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
},
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.html$/,
use: [
{ loader: 'file-loader?name=[name].[ext]' },
{ loader: 'extract-loader' },
{ loader: 'html-loader' }
]
}
]
},
plugins: [
new CleanWebpackPlugin()
],
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
А мой index.html
выглядит так:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>stuff</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<script src="./bundle.js" charset="utf-8"></script>
</body>
</html>
My index.ts
содержит:
import './index.html';
Что я пробовал
Сначала я попытался просто добавить импорт для моей CSS в index.ts
:
import './style.css';
Но это не сработало. Затем я посмотрел документацию по html-загрузчику, и она, похоже, намекала на то, что я ищу:
Тем не менее, я читал, что такие встроенные загрузчики устарели, и, просматривая исходный код, кажется, нет никакой опции конфигурации для интерполяции. В любом случае я пытался сделать это, как описано в документации, но он либо просто не работает, либо выдает сообщение об ошибке require
, но не может воспроизвести эту ошибку. Мои index.html
содержали:
<link rel="stylesheet" href="${require(`style.css`)">
и index.ts
содержат:
require("html-loader?interpolate=require!./index.html");
Как получить веб-пакет для перемещения моего style.css
в папку dist?
У меня есть догадка, я неправильно понимаю, как предполагается использовать веб-пакет. Если у меня что-то работает, могу ли я выложить свою конфигурацию веб-пакета в обмен стека обзора кода, чтобы получить помощь в создании более идиоматичной конфигурации веб-пакета?