Я пытаюсь сделать что-то в проекте, но я не уверен, что это возможно, я ошибаюсь или что-то не понимаю. Мы используем webpack, и идея состоит в том, чтобы обслуживать более одного файла HTML.
localhost: 8181 -> обслуживает index.html
localhost: 8181 / example.html -> обслуживает example.html
Я пытаюсь сделать это, установив несколько точек входа, следуя документации :
Структура папок:
/
|- package.json
|- webpack.config.js
/src
|- index.html
|- example.html
| /js
|- main.js
|- example.js
Webpack.config.js:
...
entry: {
main: './js/main.js',
exampleEntry: './js/example.js'
},
output: {
path: path.resolve(__dirname, 'build', 'target'),
publicPath: '/',
filename: '[name].bundle.js',
chunkFilename: '[id].bundle_[chunkhash].js',
sourceMapFilename: '[file].map'
},
...
index.html
<!DOCTYPE html>
<html
<head>
...
<link type="text/css" href="https://stackoverflow.com/style/default.css">
</head>
<body>
<div id="container"></div>
<script src="/main.bundle.js"></script>
</body>
</html>
example.html:
<!DOCTYPE html>
<html
<head>
...
<link type="text/css" href="https://stackoverflow.com/style/default.css">
</head>
<body>
...
<script src="/example.bundle.js"></script>
</body>
</html>
Кто-нибудь знает, что я делаю не так?
Спасибо.
webpack
webpack-dev-server
мигелитомп
источник
источник
Ответы:
Считайте точку входа корнем дерева, которое ссылается на многие другие ресурсы, такие как модули 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 . Особенно актуально для вашего варианта использования:
Вероятно, у вас должно получиться что-то подобное в конце (предупреждение: не проверено)
Не забывайте ссылаться на имя точки входа в массиве chunks, поэтому в вашем примере это должно быть
exampleEntry
. Вероятно, также неплохо переместить шаблоны в определенную папку вместо того, чтобы помещать их непосредственно в корневую папку src.Надеюсь это поможет.
источник
Вы также можете использовать плагин Copy Webpack, если вам не нужны две разные сборки, т. Е. Если вы просто хотите обслуживать другой HTML с тем же самым
main.bundle.js
.Плагин действительно очень простой (протестирован только в webpack v4):
Затем
example.html
вы можете загрузить сборку изindex.html
. Например:источник
Чтобы использовать несколько файлов HTML при
Webpack
использовании HtmlWebpackPlugin :const HtmlWebpackPlugin = require('html-webpack-plugin'); let htmlPageNames = ['example1', 'example2', 'example3', 'example4']; let multipleHtmlPlugins = htmlPageNames.map(name => { return new HtmlWebpackPlugin({ template: `./src/${name}.html`, // relative path to the HTML files filename: `${name}.html`, // output HTML files chunks: [`${name}`] // respective JS files }) }); module.exports = { entry: { main: './js/main.js', example1: './js/example1.js', //... repeat until example 4 }, module: { //.. your rules }; plugins: [ new HtmlWebpackPlugin({ template: "./src/index.html", chunks: ['main'] }) ].concat(multipleHtmlPlugins) };
Вы можете добавить в
htmlPageNames
массив любое количество HTML-страниц . Убедитесь, что каждый HTML-файл и соответствующий JS-файл имеют одинаковое имя (это предполагается в приведенном выше коде).источник
Есть другое решение, предполагающее, что Webpack ^ 4.44.1. То есть импорт HTML в ваше приложение JS / TS.
Пример webpack.config.js
Соответствующее приложение
index.ejs
about.html
Webpack скопирует файл about.html в соответствующую папку вывода .
источник
Этот код поможет, если у вас много шаблонов :)
источник