Нашли сравнение двух методов (строка запроса vs имя файла) здесь :
Версия в виде запроса имеет две проблемы.
Во-первых, он не всегда может быть браузером, который реализует кеширование, через которое мы должны разрушить. Говорят, что некоторые (возможно, более старые) прокси игнорируют запрос в отношении поведения кэширования.
Во-вторых, в некоторых более сложных сценариях развертывания, где у вас есть несколько интерфейсных и / или множественных серверных серверов, обновление - это не что иное, как мгновенное. Вы должны одновременно использовать как старую, так и новую версию своих активов. См. Например, как это влияет на вас при использовании Google App Engine.
См. точку входа в качестве корня дерева, которая ссылается на многие другие активы, такие как модули javascript, изображения, шаблоны и т. д. Когда вы определяете более одной точки входа, вы в основном разделяете свои активы на так называемые куски, чтобы не иметь весь свой код и активы в одном пакете.
То, что я думаю, вы хотите достичь, - это иметь более одного «index.html» для разных приложений, которые также относятся к различным фрагментам ваших активов, которые вы уже определили с вашими точками входа.
Копирование файла index.html или даже создание ссылки со ссылками на эти точки входа не обрабатывается по механизму входа - это наоборот. Основной подход для обработки html-страниц - использование файла html-webpack-plugin
, который не только может копировать html-файлы, но также имеет обширный механизм для шаблонов. Это особенно полезно, если вы хотите, чтобы ваши пакеты были суффиксными с хэшем пакетов, что очень помогает избежать проблем с кешированием браузера при обновлении вашего приложения.
Как вы определили шаблон имени как [id].bundle_[chunkhash].js
, вы можете больше не ссылайтесь на свой пакет javascript как main.bundle.js
, так как он будет называться как main.bundle_73efb6da.js
.
Посмотрите на html-webpack-plugin . Особенно важно для вашего случая использования:
Вероятно, у вас должно быть что-то подобное в конце (предупреждение: не проверено)
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'src/index.html',
chunks: ['main']
}),
new HtmlWebpackPlugin({
filename: 'example.html',
template: 'src/example.html',
chunks: ['exampleEntry']
})
]
Обратите внимание, чтобы ссылаться на имя точки входа в массиве chunks, поэтому в вашем примере это должно быть exampleEntry
. Вероятно, это также хорошая идея переместить ваши шаблоны в определенную папку вместо их непосредственно внутри корневой папки src.
Надеюсь, это поможет.
Вы также можете использовать Copy Webpack Plugin , если вам не нужны две разные сборки, т. е. предполагается, что вы просто хотите использовать другой HTML с тем же main.bundle.js
.
Плагин действительно мертв (проверен только в webpack v4):
const CopyWebpackPlugin = require('copy-webpack-plugin');
const config = {
plugins: [
new CopyWebpackPlugin([
{ from: './src/example.html', to: './example.html' }
])
]
}
Затем в example.html
вы можете загрузить сборку с index.html
. Например ::
<!DOCTYPE html>
<html
<head>
...
<title>Example</title>
</head>
<body>
<div id="container"> Show an example </div>
<script src="main.bundle.js"></script>
</body>
</html>