2016-10-22 4 views
1

J'ai un grand projet côté client que je voudrais regrouper en 2 faisceaux au lieu de 1.RequireJS Optimizer comprennent dur

Ceci est mon arbre de dépendance:

module's dependency tree

Le sortie désirée serait d'avoir ces faisceaux:

  1. main qui comprend b
  2. x qui inclut seulement a (comme b est déjà inclus dans le premier paquet et je ne veux pas que les utilisateurs téléchargent plus d'une fois un morceau de code).

Voilà ma configuration optimiseur:

({ 
    appDir: 'www', 
    baseUrl: 'js/', 
    mainConfigFile: 'www/js/require.config.js', 
    dir: 'www-release', 
    modules: [ 
    { 
     name: 'main', 
     exclude: ['x'] 
    }, 
    { 
     name: 'x', 
     exclude: ['main'] 
    } 
    ], 
    optimize: 'none', 
    removeCombined: true 
}) 

Je ne veux exclure de main l'arbre entier de dépendance de x, mais encore des modules inclus que j'exige pas explicitement, comme a.

Je sais que:

  1. include - comprennent explicitement module qui ne sont pas tenus directement et dépendances de l'arbre entier.
  2. exclude - l'exclusion d'un module exclut en fait toute son arborescence de dépendance, en surchargeant include en cas de conflit.
  3. excludeShallow - inclut l'arborescence de dépendances du module, et non, y compris le module lui-même.

Ayant cela, je ne vois pas un moyen clair d'accomplir ce que je veux, pouvez-vous aider?

+0

Est-ce quelque chose comme ça valide? '{ nom: 'x', exclure: ['main', 'b'] }'? Avez-vous envisagé d'utiliser webpack en passant? –

+0

Cela ne fonctionnera pas, b sera manquant dans les deux paquets de cette façon. En ce qui concerne webpack - je l'ai mais pour l'instant je suis coincé avec requirejs, je ne sais pas quel est le coût de passer à webpack. J'ai le sentiment que ça ne va pas être rapide. – johni

Répondre

0

Vous devez utiliser la fonctionnalité de regroupement requier.js comme ceci.

Dans votre fichier require.config.js

Besoin d'écrire Bundles paramètres

bundles: { 
    x: ['files for x bundle'], 
    b: ['files for b bundle'] 
} 

après ce fichier besoin de changement de construction.

fichier de configuration de l'Optimiseur

({ 
    appDir: 'www', 
    baseUrl: 'js/', 
    // mainConfigFile: 'www/js/require.config.js',// not need here 
    dir: 'www-release', 
    modules: [ 
     { 
      name: 'main', 
      create: true, // this will create www-release/main.js file(main bundle) 
      include: ['main'], 
      exclude: ['x'] 
     }, 
     { 
      name: 'b', 
      create: true, 
      include: ['files for b bundle'], 
      exclude: ['main'] 
     }, 
     { 
      name: 'x', 
      create: true, 
      include: ['files for x bundle'] 
      exclude: ['main'] 
     } 
    ], 
    optimize: 'none', 
    removeCombined: true 
    paths: { 
     //put paths object from requierjs.confige file 
    } 
}); 
+0

L'OP veut créer deux paquets, pas 3. – Louis

+0

dans ce cas il suffit d'ajouter 2 modules et 2 paquets –