Concat les scripts dans l'ordre avec Gulp
Dire, par exemple, vous êtes la construction d'un projet sur l'épine Dorsale ou quoi que ce soit et vous avez besoin de charger des scripts dans un certain ordre, par exemple underscore.js
doit être chargé avant backbone.js
.
Comment puis-je obtenir pour concat les scripts de sorte qu'ils sont 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 droit afin de scripts dans mon source/index.html
, mais vu que les fichiers sont organisés par ordre alphabétique, gulp sera concat underscore.js
après backbone.js
, et l'ordre des scripts dans mon source/index.html
n'a pas d'importance, il regarde les fichiers dans le répertoire.
Si quelqu'un a une idée sur ce point?
Meilleure idée que j'ai, c'est de renommer le vendeur scripts avec 1
, 2
, 3
de leur donner le bon ordre, mais je ne sais pas si j'aime ça.
Comme je l'ai appris plus j'ai trouvé Browserify est une excellente solution, il peut être une douleur au début, mais c'est génial.
- Je pourrais mentionner que maintenant-a-jours, je suis à l'aide de browserify. Il a sa propre petite courbe d'apprentissage de l'OMI. J'ai eu du mal au début, mais gulp browserify est une façon cool pour aller! En permettant à votre code pour être modulaire! Vous gérer l'ordre dans une cale, donc la concaténation n'est pas nécessaire lors de l'utilisation de browserify.
- Soins à donner plus de détails pour que votre solution ou un lien?
- kroltech.com/2013/12/... voici un lien vers un standard sur le projet qui m'a vraiment aidé à démarrer avec une bonne gestion de projet. Après la souffrance de l'apprentissage de tout cela, je peux gérer mes projets beaucoup mieux. Il a le projet sur github et vous pouvez voir comment il utilise browserify. Youtube est toujours utile et bien sûr la source elle-même est toujours sous-estimé github.com/substack/node-browserify#usage
- Fondamentalement, l'idée est de pouvoir utiliser npm comme la syntaxe avec
require
sur l'extrémité avant, parce que bien sûr, si vous avez utilisé npm sur votre serveur de côté, vous voyez comment vous pouvez exiger des modules, mais browserify vous permet de le faire sur le côté client code, gardez à l'esprit pour commencer, il nécessite un peu de bricolage, mais c'est surtout à l'intérieur de l'emballage.json et si vous voulez l'utiliser avec gulp.js ou grunt.js. Si vous installez le gulp/grunt browserify, vous pouvez exécutergulp/grunt browserify
et transformer votre script dans un script, c'est une légère courbe d'apprentissage, mais il vaut de l'OMI. - Merci! En fait je suis tombé sur l'excellent article de medium.com/@dickeyxxx/... un bon point que vous n'avez pas vraiment besoin
browserify
pourAngular
modules, où la simple concaténation des œuvres et de l'ordre n'a pas d'importance 🙂 - Nice, je vais vous donner une lecture de la curiosité. Je suis à l'aide de backbone.js et pas angular.js donc, dans mon cas, il semble que j'ai besoin de coller à browserify.
- Je suis l'aide de bower pour la gestion de mon côté client dépendances et il fonctionne très bien avec gulp. main-bower-fichiers peut être utilisé pour obtenir une liste de toutes les sources afin que vous pouvez alors concat et uglify.
- essayez d'utiliser gulp-de l'ordre de package
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème récemment avec Grunt lors de la construction de mon application AngularJS. Voici une question que j'ai posté.
Ce que j'ai fini par faire, c'est explicitement liste les fichiers dans l'ordre dans le grunt config. Le fichier de configuration sera alors ressembler à ceci:
Grunt est en mesure de comprendre quels sont les fichiers doublons et de ne pas les inclure. La meme technique fonctionne avec Gulp ainsi.
Une autre chose qui aide si vous avez besoin de quelques fichiers à venir après une goutte de fichiers, est à exclure des fichiers spécifiques de votre glob, comme suit:
Vous pouvez combiner cela avec spécifier les fichiers qui doivent venir en premier, comme expliqué au Tchad Johnson réponse.
src
et à monbuild
je vous ai vu à l'aide de cette syntaxe, j'ai fini par effacer cette partie parce que je ne savais pas exactement pourquoi j'ai besoin d'elle, de sens maintenant.['./source/js/*.js', './source/js/**/underscore.js', './source/js/**/!(underscore)*.js']
!(foobar)
) si vous avez inclus un fichier spécifique à l'avance.['src/app/**/!(*-)*.js', 'src/app/**/*.js']
J'ai utilisé le clin d'oeil, afin plugin, mais il n'est pas toujours couronnée de succès comme vous pouvez le voir par mon stack overflow post gulp ordre nœud module avec des flux fusionnés. Lors de la navigation par le biais de la Gulp docs je suis tombé sur le streamque module qui a très bien fonctionné pour la spécification de l'ordre de dans mon cas de concaténation. https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
Exemple de la façon dont je l'ai utilisé est en dessous de
Avec gulp-useref vous pouvez concaténer tous les script déclarer dans votre fichier d'index, dans l'ordre dans lequel vous déclarez.
https://www.npmjs.com/package/gulp-useref
Et dans le HTML, vous devez déclarer le nom de la version du fichier 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 tri-flux peut également être utilisé pour assurer l'ordre spécifique de fichiers avec
gulp.src
. Exemple de code qui met lebackbone.js
toujours comme le dernier fichier à traiter:Je viens d'ajouter des numéros au début du nom de fichier:
Il travaille dans le gulp sans aucun problème.
J'ai mes scripts sont organisés dans des dossiers différents pour chaque paquet que je tire de verdure, en plus de ma propre script pour mon application. Puisque vous allez à la liste de l'ordre de ces scripts quelque part, pourquoi ne pas en faire la liste dans votre gulp fichier? Pour les nouveaux développeurs sur votre projet, il est bon que l'ensemble de votre script les points d'extrémité sont répertoriés ici. Vous pouvez faire cela avec gulp-ajouter-src:
gulpfile.js
Remarque: jQuery et Bootstrap ajoutée pour les besoins de la démonstration de la commande. Probablement préférable d'utiliser les Cdn pour ceux puisqu'ils sont donc largement utilisés et les navigateurs pourraient les avoir mis en cache à partir d'autres sites déjà.
Essayer stream-series. Il fonctionne comme fusion-stream/événement-stream.merge() sauf qu'au lieu d'entrelacement, il ajoute à la fin. Il n'exige pas de vous de spécifier le mode de l'objet comme streamqueue, de sorte que votre code devient plus propre.
Une méthode alternative consiste à utiliser une Gorgée plugin créé spécialement pour ce problème. https://www.npmjs.com/package/gulp-ng-module-sort
Il vous permet de trier vos scripts en les ajoutant dans un
.pipe(ngModuleSort())
en tant que tel:En supposant un répertoire convention:
Espérons que cette aide!
Pour moi, j'avais natualSort() et angularFileSort() dans le tuyau qui a été la réorganisation des fichiers. Je l'ai enlevé et maintenant il fonctionne très bien pour moi
merge2 ressemble à la seule travail et maintenu commandé flux de la fusion de l'outil à l'heure actuelle.
Je viens d'utiliser gulp-angulaire-filesort
Je suis dans un module environnement où tous sont au cœur-des personnes à charge à l'aide de gulp.
Ainsi, la
core
module doit être ajoutée avant les autres.Ce que j'ai fait:
src
dossiergulp-rename
votrecore
répertoire_core
gulp est de garder l'ordre de votre
gulp.src
, mon concatsrc
ressemble à ceci:Il va évidemment prendre le
_
que le premier répertoire de la liste (naturel de tri?).Note (angularjs):
J'utilise ensuite gulp-angulaire-extender d'ajouter dynamiquement des modules à la
core
module.Compilé, il ressemble à ceci:
Où les Admin et les Produits sont de deux modules.
si vous souhaitez commander un tiers dépendances de bibliothèques, essayez wiredep. Ce package fondamentalement vérifie chaque paquet de dépendance dans la charmille.json puis câbler pour vous.
J'ai essayé plusieurs solutions à partir de cette page, mais aucune n'a fonctionné. J'ai eu une série de fichiers numérotés de qui je voulais simplement être ordonnée par ordre alphabétique foldername ainsi, lorsque les canalisations de
concat()
ils se retrouvaient dans le même ordre. C'est, à protéger l'ordre de l'expansion de l'entrée. Facile, droit?Voici mon spécifiques de la preuve-de-concept de code (
print
est juste pour voir la commande imprimé à la cli):La raison de la folie de
gulp.src
? J'ai déterminé quegulp.src
était en cours d'exécution asynchrone lorsque j'ai été en mesure d'utiliser unsleep()
fonction (à l'aide d'un.map
avec sleeptime incrémenté par index) pour commander le flux de sortie correctement.Le résultat de l'asynchrone de
src
dire dirs avec plus de fichiers il est venu après dirs avec moins de fichiers, parce qu'ils ont pris plus de temps à traiter.Dans ma gorgée de l'installation, je suis en précisant le vendeur d'abord les fichiers, puis en spécifiant le (plus général) tout ce qui, de seconde en seconde. Et il réussi à mettre le vendeur js avant l'autre personnalisés de choses.
Apparemment, vous pouvez passer dans le "nosort" option d'avaler.src gulp.src.