Comment puis-je spécifier que je ne veux pas d'un module dans un bloc avec webpack 4, supposons que je ne veuille pas de lodash dans le fichier fournisseur (quelles que soient les conséquences), que puis-je faire?
Voici la configuration réelle:
splitChunks: {
name: 'vendors',
maxAsyncRequests: 1,
maxInitialRequests: 2,
chunks: 'initial',
}
Un test
peut également prendre une méthode. Cela permet beaucoup de flexibilité. Par exemple..
vendor: {
test(mod/* , chunk */) {
// Only node_modules are needed
if (!mod.context.includes('node_modules')) {
return false;
}
// But not node modules that contain these key words in the path
if ([ 'lodash', 'react'].some(str => mod.context.includes(str))) {
return false;
}
return true;
},
name: 'vendor',
chunks: 'all',
reuseExistingChunk: true
},
Vous pouvez le faire en utilisant l'anticipation négative:
test: /[\\/]node_modules[\\/]((?!(lodash)).*)[\\/]/
La configuration pour charger toutes les dépendances d'un projet à partir de /node_modules
dans un bloc appelé vendors
ressemble à ceci:
optimization: {
splitChunks: {
cacheGroups: {
commons: { test: /[\\/]node_modules[\\/]/, name: "vendors", chunks: "all" }
}
}
}
Donc, pour votre cas d'utilisation, vous pouvez modifier le RegExp pour exclure tous les modules que vous désirez. Bien sûr, l'inconvénient est que vous devez vous enchevêtrer avec des expressions régulières, et la mise en forme exacte de cette condition de test particulière dépasse mon expertise. Je connais la documentation sur optimization.splitChunks
est encore assez rare donc j'espère que cela vous aidera au moins à vous orienter dans la bonne direction.
Vous pouvez exclure un dossier spécifique de node_modules
en mettant à jour la propriété test
. Dans l'exemple ci-dessous, nous créons un seul bloc contenant tous les fournisseurs, à l'exception du module Lodash .
webpack.config.js
module.exports = {
//...
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/](!lodash)[\\/]/,
name: 'vendor',
chunks: 'all',
}
}
}
}
};
Cet exemple est basé sur exemple SplitChunksPlugin des documents Webpack .
réponse légèrement modifiée @ndequeker
test: /[\\/]node_modules[\\/](?!lodash)(.[a-zA-Z0-9.\-_]+)[\\/]/
Ça a marché pour moi