J'essaie de passer de Gulp
à Webpack
. Dans Gulp
J'ai une tâche qui copie tous les fichiers et dossiers du dossier / static / vers le dossier / build / . Comment faire de même avec Webpack
? Ai-je besoin d'un plugin?
javascript
webpack
Vitalii Korsakov
la source
la source
Réponses:
Vous n'avez pas besoin de copier les choses, le webpack fonctionne différemment de gulp. Webpack est un module de regroupement et tout ce que vous référencez dans vos fichiers sera inclus. Il vous suffit de spécifier un chargeur pour cela.
Donc, si vous écrivez:
Webpack essaiera d'abord d'analyser le fichier référencé en JavaScript (car c'est la valeur par défaut). Bien sûr, cela échouera. C'est pourquoi vous devez spécifier un chargeur pour ce type de fichier. Le fichier - ou le chargeur d' url, par exemple, prend le fichier référencé, le place dans le dossier de sortie de webpack (qui devrait être
build
dans votre cas) et renvoie l'url hachée pour ce fichier.Les chargeurs sont généralement appliqués via la configuration du webpack:
Bien sûr, vous devez d'abord installer le chargeur de fichiers pour que cela fonctionne.
la source
Exiger des ressources à l'aide du module de chargement de fichiers est la façon dont le webpack est destiné à être utilisé ( source ). Cependant, si vous avez besoin d'une plus grande flexibilité ou souhaitez une interface plus propre, vous pouvez également copier des fichiers statiques directement à l'aide de my
copy-webpack-plugin
( npm , Github ). Pourstatic
d'build
exemple:la source
Si vous souhaitez copier vos fichiers statiques, vous pouvez utiliser le chargeur de fichiers de cette manière:
pour les fichiers html:
dans webpack.config.js:
dans votre fichier js:
./static/ est relatif à l'emplacement de votre fichier js.
Vous pouvez faire de même avec des images ou autre chose. Le contexte est une méthode puissante à explorer !!
la source
index.html
dans un sous-répertoire qu'il crée appelé_
(souligné), que se passe-t-il?main.js
- dire importe tout dans lestatic
dossier:require.context("./static/", true, /^.*/);
Un avantage que le plugin copy-webpack-plugin susmentionné apporte qui n'a pas été expliqué auparavant est que toutes les autres méthodes mentionnées ici regroupent toujours les ressources dans vos fichiers de bundle (et vous obligent à "exiger" ou "importer" quelque part). Si je veux simplement déplacer des images ou des modèles partiels, je ne veux pas encombrer mon fichier de bundle javascript avec des références inutiles, je veux juste que les fichiers soient émis au bon endroit. Je n'ai trouvé aucun autre moyen de le faire dans webpack. Certes, ce n'est pas pour cela que le webpack a été conçu à l'origine, mais c'est certainement un cas d'utilisation actuel. (@BreakDS J'espère que cela répond à votre question - ce n'est qu'un avantage si vous le souhaitez)
la source
Les suggestions ci-dessus sont bonnes. Mais pour essayer de répondre directement à votre question, je suggère d'utiliser
cpy-cli
un script défini dans votrepackage.json
.Cet exemple s'attend
node
à quelque part sur votre chemin. Installer encpy-cli
tant que dépendance de développement:npm install --save-dev cpy-cli
Créez ensuite quelques fichiers nodejs. L'un pour faire la copie et l'autre pour afficher une coche et un message.
copy.js
checkmark.js
Ajoutez le script
package.json
. En supposant que les scripts sont dans<project-root>/scripts/
Pour exécuter le script:
npm run copy
la source
Vous devriez probablement utiliser CopyWebpackPlugin qui a été mentionné dans la réponse kevlened. Alternativement pour certains types de fichiers comme .html ou .json, vous pouvez également utiliser raw-loader ou json-loader. Installez-le via
npm install -D raw-loader
et ce que vous n'avez qu'à faire est d'ajouter un autre chargeur à notrewebpack.config.js
fichier.Comme:
Remarque: redémarrez le webpack-dev-server pour que les modifications de configuration prennent effet.
Et maintenant, vous pouvez exiger des fichiers html en utilisant des chemins relatifs, ce qui facilite beaucoup le déplacement des dossiers.
la source
La façon dont je charge statique
images
etfonts
:N'oubliez pas d'installer
file-loader
pour que cela fonctionne.la source
logo.png
ni de créer un nom de fichier obtus et "si tout va bien" unique pour éviter une collision globale. Même raison pour laquelle nous utilisons des modules CSS .[path][name].[ext]
et il y a beaucoup de flexibilité pour le modifier pour un environnement spécifique ou un cas d'utilisation ... file-loaderVous pouvez écrire bash dans votre package.json:
la source
"build": "webpack && xcopy images dist\\images\\ /S /Y && xcopy css dist\\css\\ /S /Y"
J'étais coincé ici aussi. copy-webpack-plugin a fonctionné pour moi.
Cependant, 'copy-webpack-plugin' n'était pas nécessaire dans mon cas (j'ai appris plus tard).
webpack ignore l'
exemple des chemins racine
Par conséquent, pour que cela fonctionne sans utiliser 'copy-webpack-plugin', utilisez '~' dans les chemins
'~' demande à webpack de considérer les 'images' comme un module
remarque: vous devrez peut-être ajouter le répertoire parent du répertoire images dans
Visitez https://vuejs-templates.github.io/webpack/static.html
la source
Le fichier de configuration webpack (dans webpack 2) vous permet d'exporter une chaîne de promesses, tant que la dernière étape renvoie un objet de configuration webpack. Voir les documents de configuration des promesses . De là:
Vous pouvez créer une simple fonction de copie récursive qui copie votre fichier, et seulement après avoir déclenché le webpack. Par exemple:
la source
permet de dire que tous vos actifs statiques sont dans un dossier "statique" au niveau racine et que vous souhaitez les copier dans le dossier de construction en conservant la structure du sous-dossier, puis dans votre fichier d'entrée)
la source