Les documents Webpack indiquent que output.publicPath
:
Le
output.path
de la vue de l'activation de Javascript.
Pourriez-vous expliquer ce que cela signifie réellement?
J'utilise output.path
et output.filename
pour spécifier où Webpack doit sortir le résultat, mais je ne sais pas quoi mettre output.publicPath
et si c'est nécessaire.
module.exports = {
output: {
path: path.resolve("./examples/dist"),
filename: "app.js",
publicPath: "What should I put here?"
}
}
javascript
webpack
Misha Moroshko
la source
la source
path
et quand utiliseriez-vouspublicPath
?Réponses:
output.path
Répertoire du disque local pour stocker tous vos fichiers de sortie (chemin absolu) .
Exemple:
path.join(__dirname, "build/")
Webpack affichera tout dans
localdisk/path-to-your-project/build/
output.publicPath
Où vous avez téléchargé vos fichiers groupés. (Par rapport à la racine du serveur)
Exemple:
/assets/
Supposons que vous ayez déployé l'application à la racine du serveur
http://server/
.En utilisant
/assets/
, l'application trouvera webpack actifs à:http://server/assets/
. Sous le capot, toutes les URL rencontrées par webpack seront réécrites pour commencer par "/assets/
".la source
Lorsqu'il est exécuté dans le navigateur, le webpack doit savoir où vous allez héberger le bundle généré. Ainsi, il est capable de demander des morceaux supplémentaires (lors de l'utilisation du fractionnement de code ) ou des fichiers référencés chargés via le chargeur de fichiers ou le chargeur d' url respectivement.
Par exemple: Si vous configurez votre serveur http pour héberger le bundle généré sous,
/assets/
vous devez écrire:publicPath: "/assets/"
la source
le publicPath est juste utilisé à des fins de développement, J'étais confus la première fois que j'ai vu cette propriété de configuration, mais il est logique maintenant que j'utilise Webpack depuis un certain tempssupposez que vous placez tous vos fichiers source js dans un
src
dossier et que vous configurez votre webpack pour créer le fichier source dans undist
dossier avecoutput.path
.Mais vous souhaitez diffuser vos ressources statiques sous un emplacement plus significatif, comme
webroot/public/assets
cette fois, vous pouvez l'utiliserout.publicPath='/webroot/public/assets'
, de sorte que dans votre html, vous puissiez référencer vos js avec<script src="/webroot/public/assets/bundle.js"></script>
.lorsque vous demandez
webroot/public/assets/bundle.js
lewebpack-dev-server
trouvera le js sous le dossier distMettre à jour:
merci pour Charlie Martin de corriger ma réponse
original: le publicPath est juste utilisé à des fins de développement, ce n'est pas seulement à des fins de développement
la source
publichPath
demandes de piratage et renvoie les fichiers en mémoire.webpack -p
pour créer vos actifs, et vos actifs devraient être servis par votre serveur d'applications ou votre serveur nginx au lieu du serveur webpack ou du middleware webpack, donc cette configuration n'est plus utile dans l'environnement de production, ai-je raison ?Vous pouvez utiliser publicPath pour pointer vers l'emplacement où vous souhaitez que webpack-dev-server serve ses fichiers "virtuels". L'option publicPath sera le même emplacement que l'option de création de contenu pour webpack-dev-server. webpack-dev-server crée des fichiers virtuels qu'il utilisera au démarrage. Ces fichiers virtuels ressemblent aux fichiers groupés créés par le webpack. Fondamentalement, vous souhaiterez que l'option --content-base pointe vers le répertoire dans lequel se trouve index.html. Voici un exemple de configuration:
webpack-dev-server a créé un dossier de ressources virtuelles avec un fichier bundle.js virtuel auquel il fait référence. Vous pouvez tester cela en accédant à localhost: 8080 / assets / bundle.js, puis archivez votre application pour ces fichiers. Ils ne sont générés que lorsque vous exécutez le serveur webpack-dev.
la source
/build/bundle.js
je fais la construction à la main, je devrai changer le fichiersrc
dans monindex.html
fichier, non?src
ligne du fichier index.html. En ce moment, il indique que"assets/bundle.js"
s'il passe à la production, le bundle sera inclus,"build/bundle.js"
donc je devrai le changer dans la ligne html srcsrc="build/bundle.js"
. Ou existe-t-il un moyen plus automatisé?/assets/
à/build
. De cette façon, je n'ai pas à modifier mon index.html. J'ai également déplacé mon index.html hors du dossier de construction et dans la racine de l'application.dans mon cas, j'ai un cdn, et je vais placer tous mes fichiers statiques traités (js, imgs, polices ...) dans mon cdn, supposons que l'url soit http://my.cdn.com/
donc s'il y a un fichier js qui est l'URL de référence d'origine en html est './js/my.js' il devrait devenir http://my.cdn.com/js/my.js dans l'environnement de production
dans ce cas, ce que je dois faire, c'est simplement définir publicpath est égal à http://my.cdn.com/ et webpack ajoutera automatiquement ce préfixe
la source
nom_fichier spécifie le nom du fichier dans lequel tout votre code groupé va être accumulé après être passé par l'étape de construction.
chemin spécifie le répertoire de sortie où app.js (nom de fichier) va être enregistré sur le disque. S'il n'y a pas de répertoire de sortie, webpack va créer ce répertoire pour vous. par exemple:
Cela va créer un répertoire myproject / examples / dist et sous ce répertoire, il crée app.js , /myproject/examples/dist/app.js . Après la construction, vous pouvez parcourir myproject / examples / dist / app.js pour voir le code fourni
publicPath: "Que dois-je mettre ici?"
publicPath spécifie le répertoire virtuel du serveur Web partir duquel le fichier fourni, app.js va être servi. Gardez à l'esprit que le mot serveur lors de l'utilisation de publicPath peut être soit webpack-dev-server, soit un serveur express ou un autre serveur que vous pouvez utiliser avec webpack.
par exemple
cette configuration indique à webpack de regrouper tous vos fichiers js dans examples / dist / app.js et d'écrire dans ce fichier.
publicPath indique à webpack-dev-server ou au serveur express de servir ce fichier groupé, par exemple examples / dist / app.js à partir de l'emplacement virtuel spécifié dans le serveur, c'est-à-dire / public / assets / js. Donc, dans votre fichier html, vous devez référencer ce fichier comme
Donc, en résumé, publicPath est comme le mappage entre
virtual directory
votre serveur etoutput directory
spécifié par la configuration output.path, chaque fois que la demande de fichier public / assets / js / app.js arrive, le fichier /examples/dist/app.js sera servila source
La documentation de webpack2 explique cela de manière beaucoup plus claire: https://webpack.js.org/guides/public-path/#use-cases
la source
publicPath est utilisé par webpack pour remplacer le chemin relatif défini dans votre css pour référencer l'image et le fichier de police.
la source