J'essaye de faire quelque chose dans un projet dont je ne sais pas si c'est possible, je suis dans une mauvaise direction ou je ne comprends pas quelque chose. Nous utilisons webpack, et l'idée est de servir plus d'un fichier html.
localhost: 8181 -> sert index.html
localhost: 8181 / example.html -> sert example.html
J'essaie de le faire en définissant plusieurs points d'entrée, en suivant la documentation :
La structure des dossiers est:
/
|- 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>
Quelqu'un sait ce que je fais de mal?
Merci.
webpack
webpack-dev-server
miguelitomp
la source
la source
Réponses:
Voir un point d'entrée comme la racine d'une arborescence qui fait référence à de nombreux autres actifs tels que des modules javascript, des images, des modèles, etc. Lorsque vous définissez plus d'un point d'entrée, vous divisez essentiellement vos actifs en soi-disant morceaux pour ne pas avoir tout votre code et vos actifs dans un seul ensemble.
Ce que je pense que vous voulez réaliser est d'avoir plus d'un "index.html" pour différentes applications qui font également référence à différents morceaux de vos actifs que vous avez déjà définis avec vos points d'entrée.
Copier un fichier index.html ou même en générer un avec des références à ces points d'entrée n'est pas géré par le mécanisme de point d'entrée - c'est l'inverse. Une approche de base pour la gestion des pages html consiste à utiliser le
html-webpack-plugin
qui non seulement peut copier des fichiers html, mais dispose également d'un mécanisme étendu de création de modèles. Ceci est particulièrement utile si vous souhaitez que vos bundles soient suffixés avec un hachage de bundle assez pratique pour éviter les problèmes de mise en cache du navigateur lorsque vous mettez à jour votre application.Comme vous avez défini un modèle de nom comme
[id].bundle_[chunkhash].js
vous ne pouvez plus référencer votre bundle javascriptmain.bundle.js
car il s'appellera quelque chose commemain.bundle_73efb6da.js
.Jetez un œil à la plugin html-webpack-plugin . Particulièrement pertinent pour votre cas d'utilisation:
Vous devriez probablement avoir quelque chose comme ça à la fin (attention: non testé)
Veuillez noter que vous devez référencer le nom du point d'entrée dans le tableau des morceaux, donc dans votre exemple cela devrait être
exampleEntry
. C'est probablement aussi une bonne idée de déplacer vos modèles dans un dossier spécifique au lieu de les avoir directement dans le dossier racine src.J'espère que cela t'aides.
la source
Vous pouvez également utiliser Copy Webpack Plugin si vous n'avez pas besoin de deux versions différentes, c'est-à-dire en supposant que vous voulez simplement servir un HTML différent avec le même
main.bundle.js
.Le plugin est vraiment très simple (testé uniquement dans webpack v4):
Ensuite,
example.html
vous pouvez charger la construction à partir deindex.html
. Par exemple:la source
Pour utiliser plusieurs fichiers HTML en
Webpack
utilisant 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) };
Vous pouvez ajouter autant de pages HTML que nécessaire au
htmlPageNames
tableau. Assurez-vous que chaque fichier HTML et JS correspondant ont le même nom (le code ci-dessus suppose que).la source
Il existe une autre solution, en supposant Webpack ^ 4.44.1. Autrement dit, importer le HTML dans votre application JS / TS.
Exemple de webpack.config.js
Application correspondante
index.ejs
about.html
Webpack copiera about.html dans le dossier de sortie correspondant .
la source
Ce code vous aiderait si vous avez beaucoup de modèles :)
la source