2 votes

Optimiser/construire des modules sous des répertoires parallèles en utilisant le même fichier de configuration dans RequireJS

J'ai l'impression que le titre n'est peut-être pas explicite :)

Configuration

Supposons que j'ai la structure suivante :

enter image description here

app.js sont les principaux modules de démarrage/entrée pour les applications qui ressemblent à ceci :

app01

require.config({});

require([
    'app/component1.js'
], 
function(component){
    // do something with component1
});

app02

require.config({});

require([
    'app/component2.js'
], 
function(component){
    // do something with component2
});

qui fonctionnent tous deux avec des index.html des fichiers.

J'ai un fichier de configuration de la construction de RequireJS (en supposant un placement correct lié aux chemins) pour app01 :

({
    appDir: 'apps/app01',
    baseUrl: '.',
    dir: 'built_apps/app01',
    optimize: 'closure',
    paths: {
    },

    modules: [
        {
            name: 'app'
        }
    ]
})

ce qui fonctionne très bien. Fichier similaire (en remplaçant app01 con app02 ) fonctionne très bien pour app02 .

Problème/cible

Maintenant, je veux être en mesure d'exécuter l'outil de construction RequireJS (en utilisant Google Closure avec Rhino sous Ant, pas que cela importe vraiment dans ce cas) pour les deux app01 y app02 applications utilisant le même fichier de configuration de la construction et, de préférence, sans énumérer toutes les applications par leur nom (puisque le nombre et les noms peuvent varier au fil du temps).

En gros, je m'attends (ou plutôt j'espère) à avoir quelque chose comme ça :

({
    appDir: 'apps',
    baseUrl: '.',
    dir: 'built_apps',
    optimize: 'closure',
    paths: {

    },

    modules: [
        {
            name: 'app*/app' // notice the wildcard
        }
    ]
})

qui passerait sur built_apps trouvez toutes les applications sous app*/app et optimisez chacune d'entre elles.

Je sais que je peux utiliser Ant pour créer un tel fichier de configuration de construction à la volée par application, exécuter la construction contre lui et ensuite nettoyer, mais je préférerais avoir la solution RequireJS.

Existe-t-il un moyen de faire quelque chose comme cela avec RequireJS ?

2voto

John Whitley Points 1196

Il n'y a pas de configuration intégrée de wildcarding pour RequireJS. D'une manière ou d'une autre, vous aurez besoin de code pour le faire. J'observerai que ce que vous demandez ici revient à traduire un joker en une sorte d'itération implicite sur les objets du module, un peu comme ce que fait mustache.js prévoit pour ses modèles. Selon moi, il s'agit d'une approche assez fragile et limitée dans ce contexte.

Je recommande plutôt de générer votre modules de manière programmatique en JavaScript, directement dans la configuration de la construction. Rappelez-vous, la configuration de construction est JavaScript et pas seulement une structure de données JSON. Cela vous donne des capacités de script sophistiquées.

J'ai fait ce genre de script dans la configuration de la construction pour le programme gemme requirejs-rails . Voici un exemple de gist qui montre ce que r.js que vous verriez au moment de la construction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X