J'ai réussi à configurer Webpack pour générer CSS et JS dans des sous-répertoires respectifs, à savoir public/asests/css
et public/assets/js
. Cependant, je ne sais pas comment faire la même chose pour les images et les polices.
En d'autres termes, je veux exporter les images dans le dossier public/assets/images
et les polices dans le dossier public/assets/fonts
.
Voici mon fichier de configuration webpack:
var path = require('path');
var ExtractCSS = require('extract-text-webpack-plugin');
module.exports = {
context: path.resolve('private/js'),
resolve: ['', '.js', '.jsx', '.es6', '.json'],
entry: {
homepage: './homepage'
},
output: {
path: path.resolve('public/assets'),
publicPath: '/public/assets/',
filename: 'js/[name].js'
},
plugins: [
new ExtractCSS('css/[name].css')
],
devServer: {
contentBase: 'public'
},
module: {
loaders: [
{
test: /\.(es6|js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /\.css$/,
exclude: /node_modules/,
loader: ExtractCSS.extract('style-loader', 'css-loader')
},
{
test: /\.less$/,
exclude: /node_modules/,
loader: ExtractCSS.extract('style-loader', 'css-loader!less-loader')
},
{
test: /\.(jpg|jpeg|gif|png|woff|woff2|eot|ttf|svg)$/,
exclude: /node_modules/,
loader: 'url-loader?limit=1024'
}
]
}
}
Je pourrais comprendre cela en faisant référence à url-loader & file-loader documentation sur GitHub.
Tout ce que j'avais à faire, c'était d'ajouter un paramètre name query-string dans le chargeur pour spécifier le chemin complet. J'ai aussi appris que vous pouvez spécifier comment les fichiers doivent être nommés à l'emplacement de sortie.
{
test: /\.(jpg|jpeg|gif|png)$/,
exclude: /node_modules/,
loader:'url-loader?limit=1024&name=images/[name].[ext]'
},
{
test: /\.(woff|woff2|eot|ttf|svg)$/,
exclude: /node_modules/,
loader: 'url-loader?limit=1024&name=fonts/[name].[ext]'
}
{
test: /\.(ttf|eot|svg|woff2?)(\?v=[a-z0-9=\.]+)?$/i,
include: folders.npm,
loader: 'file?name=fonts/[name].[ext]'
},
{
test: /\.(jpe?g|png|gif|svg|ico)$/i,
include: folders.src,
loaders: [
'file?name=images/[sha512:hash:base64:7].[ext]',
'image-webpack?progressive=true&optimizationLevel=7&interlaced=true'
]
}
C'est ce que j'utilise en production. Je rencontre souvent des situations où des images * .svg sont utilisées et des polices SVG pour le repli IE Ici, je suppose que les polices sont toujours à l'intérieur de node_modules. J'ai aussi vu des développeurs faire test: /fonts\/[w+].(svg|eot ....)
.
J'ai pu résoudre ce problème avec file-loader Si vous utilisez Webpack 4, vous utiliseriez use
au lieu de loader
.
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: ['file-loader?name=fonts/[name].[ext]']
}