Disons, par exemple, que vous construisez un projet sur Backbone ou autre et que vous devez charger des scripts dans un certain ordre, par exemple underscore.js
doit être chargé avantbackbone.js
.
Comment puis-je faire concaténer les scripts afin qu'ils soient dans l'ordre?
// JS concat, strip debugging and minify
gulp.task('scripts', function() {
gulp.src(['./source/js/*.js', './source/js/**/*.js'])
.pipe(concat('script.js'))
.pipe(stripDebug())
.pipe(uglify())
.pipe(gulp.dest('./build/js/'));
});
J'ai le bon ordre de scripts dans mon source/index.html
, mais comme les fichiers sont organisés par ordre alphabétique, gulp concatent underscore.js
après backbone.js
, et l'ordre des scripts dans monsource/index.html
n'a pas d'importance, il regarde les fichiers dans le répertoire.
Alors, quelqu'un a-t-il une idée à ce sujet?
Meilleure idée que j'ai est de renommer les scripts de fournisseurs avec 1
, 2
,3
pour leur donner l'ordre, mais je ne suis pas sûr si je comme ça.
Au fur et à mesure que j'en apprenais plus, j'ai trouvé que Browserify était une excellente solution, cela peut être pénible au début, mais c'est génial.
la source
require
sur le front-end car bien sûr, si vous avez utilisé npm sur votre serveur, vous voyez comment vous pouvez exiger des modules, mais browserify vous permet de le faire sur le code côté client, gardez en tête, pour commencer, il faut un peu de bricolage, mais c'est principalement à l'intérieur du package.json et si vous voulez l'utiliser avec gulp.js ou grunt.js. Si vous installez le package browserify gulp / grunt, vous pouvez exécutergulp/grunt browserify
et transformer votre script en un script principal, c'est une légère courbe d'apprentissage mais ça vaut le coup IMO.browserify
deAngular
modules, où la simple concaténation fonctionne et l'ordre n'a pas d'importance :)Réponses:
J'ai eu un problème similaire récemment avec Grunt lors de la création de mon application AngularJS. Voici une question que j'ai postée.
Ce que j'ai fini par faire, c'est de lister explicitement les fichiers dans l'ordre dans la configuration grunt. Le fichier de configuration ressemblera alors à ceci:
Grunt est capable de déterminer quels fichiers sont des doublons et de ne pas les inclure. La même technique fonctionnera également avec Gulp.
la source
Une autre chose qui aide si vous avez besoin que certains fichiers viennent après un blob de fichiers, est d'exclure des fichiers spécifiques de votre glob, comme ceci:
Vous pouvez combiner cela avec la spécification des fichiers qui doivent venir en premier, comme expliqué dans la réponse de Chad Johnson.
la source
src
et à monbuild
je vous ai vu utiliser cette syntaxe, j'ai fini par effacer cette partie parce que je ne savais pas exactement pourquoi j'en avais besoin, cela a du sens maintenant.['./source/js/*.js', './source/js/**/underscore.js', './source/js/**/!(underscore)*.js']
!(foobar)
) si vous avez préalablement inclus un fichier spécifique.['src/app/**/!(*-)*.js', 'src/app/**/*.js']
J'ai utilisé le plugin gulp-order mais il n'est pas toujours réussi comme vous pouvez le voir par mon module de nœud post -commande de débordement de pile avec des flux fusionnés . En parcourant les documents Gulp, je suis tombé sur le module streamque qui a très bien fonctionné pour spécifier l'ordre de la concaténation dans mon cas. https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
Un exemple de la façon dont je l'ai utilisé est ci-dessous
la source
Avec gulp-useref, vous pouvez concaténer chaque script déclaré dans votre fichier d'index, dans l'ordre dans lequel vous le déclarez.
https://www.npmjs.com/package/gulp-useref
Et dans le HTML, vous devez déclarer le nom du fichier de construction que vous souhaitez générer, comme ceci:
Dans votre répertoire de construction, vous aurez la référence à main.min.js qui contiendra vendor.js, test.js et main.js
la source
Le flux de tri peut également être utilisé pour garantir un ordre spécifique des fichiers avec
gulp.src
. Exemple de code qui placebackbone.js
toujours comme dernier fichier à traiter:la source
J'ajoute simplement des nombres au début du nom de fichier:
Cela fonctionne en gulp sans aucun problème.
la source
J'ai mes scripts organisés dans différents dossiers pour chaque package que je tire de bower, plus mon propre script pour mon application. Puisque vous allez lister l'ordre de ces scripts quelque part, pourquoi ne pas simplement les lister dans votre fichier gulp? Pour les nouveaux développeurs sur votre projet, c'est bien que tous les points de terminaison de votre script soient répertoriés ici. Vous pouvez le faire avec gulp-add-src :
gulpfile.js
Remarque: jQuery et Bootstrap ont été ajoutés à des fins de démonstration de la commande. Il est probablement préférable d'utiliser les CDN pour ceux-ci, car ils sont si largement utilisés et les navigateurs pourraient déjà les mettre en cache à partir d'autres sites.
la source
Essayez stream-series . Cela fonctionne comme merge-stream / event-stream.merge () sauf qu'au lieu d'entrelacer, il s'ajoute à la fin. Il ne vous oblige pas à spécifier le mode objet comme streamqueue , donc votre code sort plus propre.
la source
merge2 ressemble au seul outil de fusion de flux ordonné fonctionnant et maintenu pour le moment.
Mise à jour 2020
Les API changent constamment, certaines bibliothèques deviennent inutilisables ou contiennent des vulnérabilités, ou leurs dépendances contiennent des vulnérabilités, qui ne sont pas corrigées depuis des années. Pour les manipulations de fichiers texte, vous feriez mieux d'utiliser des scripts NodeJS personnalisés et des bibliothèques populaires comme
globby
etfs-extra
avec d'autres bibliothèques sans wrappers Gulp, Grunt, etc.la source
Une méthode alternative consiste à utiliser un plugin Gulp créé spécifiquement pour ce problème. https://www.npmjs.com/package/gulp-ng-module-sort
Il vous permet de trier vos scripts en ajoutant un en
.pipe(ngModuleSort())
tant que tel:En supposant une convention d'annuaire de:
J'espère que cela t'aides!
la source
Pour moi, j'avais natualSort () et angularFileSort () dans pipe qui réorganisait les fichiers. Je l'ai enlevé et maintenant ça marche bien pour moi
la source
J'utilise juste gulp-angular-filesort
la source
Je suis dans un environnement de module où tous dépendent du noyau en utilisant gulp. Alors le
core
module doit être ajouté avant les autres.Ce que j'ai fait:
src
dossiergulp-rename
votrecore
annuaire pour_core
gulp garde l'ordre de votre
gulp.src
, mon concatsrc
ressemble à ceci:Il prendra évidemment le
_
comme premier répertoire de la liste (tri naturel?).Remarque (angularjs): J'utilise ensuite gulp-angular-extender pour ajouter dynamiquement les modules au
core
module. Compilé, il ressemble à ceci:Où Admin et Produits sont deux modules.
la source
si vous souhaitez commander des dépendances de bibliothèques tierces, essayez wiredep . Ce paquet vérifie essentiellement chaque dépendance de paquet dans bower.json puis les connecte pour vous.
la source
J'ai essayé plusieurs solutions de cette page, mais aucune n'a fonctionné. J'avais une série de fichiers numérotés que je voulais simplement classer par nom de dossier alphabétique, de sorte qu'une fois redirigés,
concat()
ils seraient dans le même ordre. Autrement dit, conservez l'ordre de l'entrée de globbing. Facile, non?Voici mon code de preuve de concept spécifique (
print
est juste pour voir la commande imprimée sur le cli):La raison de la folie de
gulp.src
? J'ai déterminé qu'ilgulp.src
fonctionnait de manière asynchrone lorsque j'ai pu utiliser unesleep()
fonction (en utilisant un.map
avec temps d'arrêt incrémenté par index) pour commander correctement la sortie du flux.Le résultat de l'asynchronisation des
src
répertoires moyens avec plus de fichiers est venu après les répertoires avec moins de fichiers, car ils prenaient plus de temps à traiter.la source
Dans ma configuration gulp, je spécifie d'abord les fichiers du fournisseur, puis je spécifie tout (plus général), ensuite. Et cela place avec succès le fournisseur js avant les autres éléments personnalisés.
la source
Apparemment, vous pouvez passer l'option "nosort" à gulp.src gulp.src .
la source