web-dev-qa-db-fra.com

Exclure certains modules d'un pack Web 4

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',
}
11
Miguel

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
 },
5
geedew

Vous pouvez le faire en utilisant l'anticipation négative:

test: /[\\/]node_modules[\\/]((?!(lodash)).*)[\\/]/
3
Davide Patti

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.

1
A. Lamansky

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 .

1
ndequeker

réponse légèrement modifiée @ndequeker

test: /[\\/]node_modules[\\/](?!lodash)(.[a-zA-Z0-9.\-_]+)[\\/]/

Ça a marché pour moi

0
Alexey Tuychiev