J'essaie d'automatiser les actifs entrant dans / dist. J'ai le config.js suivant:
module.exports = {
context: __dirname + "/lib",
entry: {
main: [
"./baa.ts"
]
},
output: {
path: __dirname + "/dist",
filename: "foo.js"
},
devtool: "source-map",
module: {
loaders: [
{
test: /\.ts$/,
loader: 'awesome-typescript-loader'
},
{ test: /\.css$/, loader: "style-loader!css-loader" }
]
},
resolve: {
// you can now require('file') instead of require('file.js')
extensions: ['', '.js', '.json']
}
}
Je souhaite également inclure main.html du répertoire qui se trouve à côté de / lib, dans le dossier / dist lors de l'exécution de webpack. Comment puis-je faire ceci?
MISE À JOUR 1 2017_____________
Ma façon préférée de le faire maintenant est d'utiliser le html-webpack-plugin
avec un fichier modèle. Merci aussi à la réponse acceptée! L'avantage de cette façon est que le fichier d'index aura également le lien js cachbusted ajouté hors de la boîte!
-loader
suffixe. par exemplerequire('file-loader?name=[name].[ext]!../index.html');
{ test: /index\.html/, loader: 'file-loader', query: { name: '[name].[ext]' }
à votreloaders
tableau dans votre fichier de configuration webpack, seulement je n'ai pas pu obtenir de webpack-dev-server pour le servir, ce qui a conduit, assez curieusement, à un 404 en requête/
(la racine n'existe pas !).J'ajouterai une option à la réponse de VitalyB:
Option 3
Via npm. Si vous exécutez vos commandes via npm, vous pouvez ajouter cette configuration à votre package.json (consultez également le webpack.config.js là aussi). Pour le développement de run
npm start
, pas besoin de copier index.html dans ce cas car le serveur web sera exécuté à partir du répertoire des fichiers source, et le bundle.js sera disponible au même endroit (le bundle.js ne vivra qu'en mémoire mais sera disponible comme s'il était localisé avec index.html). Pour la productionnpm run build
, un dossier dist contiendra votre bundle.js et index.html sera copié avec la bonne vieille commande cp, comme vous pouvez le voir ci-dessous:Mise à jour: option 4
Il existe un plugin copy-webpack , comme décrit dans cette réponse Stackoverflow
Mais généralement, à l'exception du tout "premier" fichier (comme index.html) et des éléments plus volumineux (comme de grandes images ou des vidéos), incluez le css, le html, les images et ainsi de suite directement dans votre application via
require
et webpack l'inclura pour vous (enfin, après l'avoir configuré correctement avec des chargeurs et éventuellement des plugins).la source
Vous pouvez utiliser CopyWebpackPlugin . Cela fonctionne comme ça:
la source
package.json
ne sont utilisés que pour des choses simples comme démarrer le testeur ou le serveur de développement.Je dirais que la réponse est: vous ne pouvez pas. (ou du moins: vous ne devriez pas). Ce n'est pas ce que Webpack est censé faire. Webpack est un bundler, et il ne doit pas être utilisé pour d'autres tâches (dans ce cas: la copie de fichiers statiques est une autre tâche). Vous devez utiliser un outil comme Grunt ou Gulp pour effectuer de telles tâches. Il est très courant d'intégrer Webpack en tant que tâche Grunt ou en tant que tâche Gulp . Ils ont tous deux d'autres tâches utiles pour copier des fichiers comme vous l'avez décrit, par exemple, grunt-contrib-copy ou gulp-copy .
Pour les autres actifs (pas le
index.html
), vous pouvez simplement les regrouper avec Webpack (c'est exactement à quoi sert Webpack). Par exemplevar image = require('assets/my_image.png');
,. Mais je suppose que vousindex.html
ne devez pas faire partie du bundle, et donc ce n'est pas un travail pour le bundler.la source
file-loader
qui fondamentalement juste copie le fichier / image dans le répertoire de sortie et vous donne l'URL lorsque vous l' exige:var url = require('myFile');
. Comme je l'ai dit, un bundle peut être un ou plusieurs fichiers.Vous pouvez ajouter l'index directement à votre configuration d'entrée et en utilisant un chargeur de fichiers pour le charger
la source
Pour copier un
index.html
fichier déjà existant dans ledist
répertoire, vous pouvez simplement utiliser le HtmlWebpackPlugin en spécifiant la sourceindex.html
comme modèle .Le
dist/index.html
fichier créé sera fondamentalement le même que votre fichier source à la différence que les ressources groupées comme les fichiers .js sont injectées avec des<script>
balises par webpack. La minification et d'autres options peuvent être configurées et sont documentées sur github .la source
Pour étendre la réponse de @ hobbeshunter si vous ne voulez prendre que index.html, vous pouvez également utiliser CopyPlugin. Le moyen le plus simple est d'utiliser CopyPlugin pour tout:
ensuite
Comme vous pouvez le voir, copiez tout le dossier statique avec tout son contenu dans le dossier dist. Aucun css ou fichier ou tout autre plug-in nécessaire.
Bien que cette méthode ne convienne pas à tout, elle ferait le travail simplement et rapidement.
la source
Cela fonctionne bien sur Windows:
npm install --save-dev copyfiles
package.json
j'ai une tâche de copie:"copy": "copyfiles -u 1 ./app/index.html ./deploy"
Cela déplace mon index.html du dossier de l'application vers le dossier de déploiement.
la source
J'ai aussi trouvé facile et assez générique pour mettre mon
index.html
fichier dans ledist/
répertoire et ajouter<script src='main.js'></script>
àindex.html
inclure mes fichiers webpack empaquetés.main.js
semble être le nom de sortie par défaut de notre bundle si aucun autre n'est spécifié dans le fichier conf de webpack . Je suppose que ce n'est pas une bonne solution à long terme, mais j'espère que cela peut aider à comprendre le fonctionnement du Webpack .la source