2016-02-15 1 views
0

Je voudrais concaténer en un seul fichierbannière entre les fichiers dans Grunt

plugins.js (out of jQuery function) 
fileA.js (jQuery function should start before this file) 
fileB.js 
... 
fileZ.js (jQuery function should end after this file) 

En même temps, je voudrais utiliser jsbeautifier dans tous ces fichiers.

Comment pourrais-je ajouter deux "bannières" avant fileA.js

jQuery(function($){ 

et après fileZ.js

}); 

?

solutions partielles je peux penser.

a) Ajouter jQuery (function ($) {dans fileA.js et fileZ.js correspondant Cela me oblige à exclure ces deux fichiers de jsbeautifier qui jetterait un erreur. de plus, je dois changer l'ouverture de la fonction/fermeture si je change l'ordre de fileA.js, etc

b) Inclure deux fichiers qui contiennent l'ouverture/fermeture où il correspond

c) Ajouter " bannières "de la même manière que cela (je ne sais pas comment faire quelque chose comme ça)

concat: { 
    my_script: { 
     files: { 
      'myscript.js': [ 
       'plugins.js', 
       // 'jQuery(function($){', 
       'fileA.js', 
       'fileB.js', 
       // ... 
       'fileZ.js', 
       // '});' 
      ], 
     }, 
    }, 
}, 

Edit: Je sais que pour ce cas précis, je peux utiliser

footer: '})', 

mais il est seulement une solution à la moitié du problème

Y at-il une meilleure/simplier façon de le faire ? A) et b) travaillent mais je demande un moyen plus simple comme c) que je ne sais pas comment atteindre.

+0

Vous-même avez donné les solutions possibles, alors, quelle est la question? – JotaBe

+0

Je ne connais pas grand-chose à Grunt. La question est de savoir s'il y a une bonne/meilleure façon de le faire qui pourrait être évidente mais qui me manque en raison de mon manque de connaissance avec Grunt. Merci – Alvaro

+0

S'il vous plaît, mettez à jour votre aswer pour énoncer cette question plus clairement. – JotaBe

Répondre

0

Il y a plusieurs posibilités, par exemple:

  1. Vous pouvez utiliser une tâche de copie avec une fonction de processus qui ajoute le code avant et après le fichier contenu original: grunt-contrib-copy process

  2. Vous pouvez utilise également une combinaison de bannière (début du fichier de sortie), séparatos (entre chaque fichier concaténé) et pied de page (bas du fichier de sortie), avec grunt-contrib-concat

  3. Vous pouvez utiliser grunt-contrib-concat avec l'option de processus, similtar à 1.

Vous devez prendre en compte dans quel ordre sont exécutées les tâches. Cela devrait être exécuté avant le beautifier.

0

Merci à la réponse de JotaBe Je pourrais enquêter sur grunt-contrib-copy process Ceci est le code que j'ai finalement utilisé.

concat: { 
    my_script: { 
     options: { 
      process: function(src, filepath) { 
       return src.replace(/\/\/ jQuery\(function\(\$\){/, "jQuery(function($){\n"); 
      }, 
      footer: '\n});', 
     }, 
     files: { 
      'myscript.js': [ 
       'plugins.js', 
       'fileA.js', 
       'fileB.js', 
       // ... 
       'fileZ.js', 
      ], 
     }, 
    }, 
}, 

fileA.js, qui est généralement le fichier dans lequel je crée des variables, doit commencer par l'enceinte jQuery commentée. Fondamentalement, le «processus» de Grunt Concat le commente. Aussi, j'ai besoin d'inclure un pied de page pour l'enceinte de fermeture (bien qu'il pourrait être créé de la même manière que l'ouverture).

// jQuery(function($){