Optimiser / construire des modules sous répertoires parallèles en utilisant le même fichier de configuration dans requirejs
-
12-11-2019 - |
Question
J'ai le sentiment que le titre pourrait ne pas être explicatif :)
Installer
Supposons que j'ai la structure suivante:
où app.js
Les fichiers sont des modules de bootstrap / entrée principaux 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 travaillent tous les deux avec approprié index.html
des dossiers.
J'ai un fichier de configuration de build requisejs (supposez 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 (remplacement app01
avec app02
) fonctionne très bien pour app02.
Problème / cible
Maintenant, je veux pouvoir exécuter l'outil de build requisejs (en utilisant la fermeture Google avec Rhino sous ANT, pas que cela compte vraiment dans ce cas) pour les deux app01 et app02 applications utilisant le même Créer un fichier de configuration et, de préférence, sans réellement répertorier toutes les applications par son nom (car le nombre et les noms peuvent varier dans le temps).
Fondamentalement, je m'attends (ou plutôt à l'espoir) à avoir quelque chose comme ceci:
({
appDir: 'apps',
baseUrl: '.',
dir: 'built_apps',
optimize: 'closure',
paths: {
},
modules: [
{
name: 'app*/app' // notice the wildcard
}
]
})
qui reviendrait built_apps
Répertoire, trouvez toutes les applications sous applications * / applications et optimisez chacune d'entre elles.
Je sais que je peux utiliser Ant pour créer un tel fichier de configuration de build sur la volée par application, exécuter la construction, puis nettoyer, mais je préfère avoir la solution requisejs.
Existe-t-il un moyen de faire quelque chose comme ça avec requirejs?
La solution
Il n'y a pas de configuration de wildcarding intégrée pour requirejs. D'une manière ou d'une autre, vous aurez besoin de code pour le faire. Je vais observer que ce que vous demandez ici revient à traduire un générique en une sorte d'itération implicite sur les objets du module, semblable à ce moustache.js Fournit ses modèles. OMI, c'est une approche assez fragile et limitée dans ce contexte.
Au lieu de cela, je recommande de générer votre modules
Array programmatiquement en JavaScript dans la configuration de build. Rappelons que la configuration de build est JavaScript, pas seulement une structure de données JSON. Cela vous donne des capacités de script sophistiquées là-bas.
J'ai fait ce type de script dans la configuration de build pour le gemme requisejs-rails. Voici un Exemple d'escroquerie qui montre quoi r.js
verrait au moment de la construction.