Combinez plusieurs fichiers JavaScript en un seul fichier JS [fermé]

90

J'utilise jquery dans mon application Web et je dois charger plus de fichiers de script jquery sur une seule page.

Google m'a suggéré de combiner tous les fichiers de script jquery en un seul fichier.

Comment puis-je faire ceci?

Chandrasekhar
la source

Réponses:

52

Sous Linux, vous pouvez utiliser un simple script shell https://github.com/dfsq/compressJS.sh pour combiner plusieurs fichiers javascript en un seul. Il utilise le service en ligne Closure Compiler afin que le script résultant soit également compressé efficacement.

$ ./compressJS.sh some-script.js another-sctipt.js onemore.js
dfsq
la source
1
cela pourrait-il fonctionner avec des guidons?
Dan Baker
3
Mieux vaut utiliser un gestionnaire de tâches comme Grunt, Gulp et d'autres choses comme ça le font automatiquement. En utilisant Grunt, je compile mes guidons less, dactylographiés, dans un dossier généré, puis je copie les fichiers js / css dans le dossier généré également, à la fin je minifie également dans un fichier js tous les fichiers .js et dans une seule css fille tous les fichiers .css. Et j'ai un observateur réexécutant cette configuration lors du changement de fichier afin que je puisse enregistrer un fichier et actualiser le navigateur et toutes les modifications ont été appliquées dans les 1 à 3 secondes.
Vadorequest
18

Combinez simplement les fichiers texte, puis utilisez quelque chose comme YUI Compressor .

Les fichiers peuvent être facilement combinés à l'aide de la commande cat *.js > main.jset main.js peut ensuite être exécuté via le compresseur YUI à l'aide de java -jar yuicompressor-x.y.z.jar -o main.min.js main.js.

Mise à jour août 2014

J'ai maintenant migré vers l'utilisation de Gulp pour la concaténation et la compression javascript, car avec divers plugins et une configuration minimale, vous pouvez faire des choses comme configurer des dépendances, compiler coffeescript, etc. ainsi que compresser votre JS.

Prydie
la source
La liaison du compresseur YUI est morte.
réformé
11

Vous pouvez le faire via

  • une. Manuellement: copiez tous les fichiers Javascript en un seul, exécutez un compresseur dessus ( facultatif mais recommandé ) et téléchargez sur le serveur et créez un lien vers ce fichier.
  • b. Utilisez PHP: créez simplement un tableau de tous les fichiers JS et de tous les fichiers et includeexportez-les dans une <script>balise
Gary Green
la source
1
L'option B n'est pas recommandée car elle oblige votre navigateur à faire de nombreuses requêtes pour tous les petits fichiers individuels .js (lent) plutôt qu'une seule requête pour un fichier .js plus gros (plus rapide).
Mikepote
5
@Mikepote, oui ... donc j'ai utilisé le mot includeie ne faites pas de <script src = "...."> lien vers plusieurs fichiers, incluez-les simplement dans un élément de script. Idéalement, un cdn avec une mise en cache appropriée devrait être utilisé.
Gary Green
Ah désolé, j'ai mal lu votre réponse.
Mikepote
3
Pouvez-vous donner un exemple ici.
Anand Solanki
Mieux vaut utiliser readfile () pour éviter la surcharge d'analyse et obtenir accidentellement une interprétation.
Chinoto Vokro
9

Je l'ai généralement sur un Makefile:

# All .js compiled into a single one.
compiled=./path/of/js/main.js

compile:
    @find ./path/of/js -type f -name "*.js" | xargs cat > $(compiled)

Ensuite, vous exécutez:

make compile

J'espère que cela aide.


la source
8

J'utilise ce script shell sur Linux https://github.com/eloone/mergejs .

Comparé aux scripts ci-dessus, il a l'avantage d'être très simple à utiliser, et un gros avantage est que vous pouvez lister les fichiers js que vous souhaitez fusionner dans un fichier texte d'entrée et non dans la ligne de commande, donc votre liste est réutilisable et vous n'avez pas à le saisir à chaque fois que vous souhaitez fusionner vos fichiers. C'est très pratique car vous répéterez cette étape chaque fois que vous voudrez passer en production. Vous pouvez également commenter les fichiers que vous ne souhaitez pas fusionner dans la liste. La ligne de commande que vous tapez le plus probablement est:

$ mergejs js_files_list.txt output.js

Et si vous souhaitez également compresser le fichier fusionné résultant:

$ mergejs -c js_files_list.txt output.js

Cela créera output-min.jsminifié par le compilateur de fermeture de Google. Ou :

$ mergejs -c js_files_list.txt output.js output.minified.js

Si vous voulez un nom spécifique pour votre fichier minifié nommé output.minified.js

Je trouve cela vraiment utile pour un site Web simple.

éloone
la source
7

Le regroupement de scripts est contre-productif, vous devez les charger en parallèle en utilisant quelque chose comme http://yepnopejs.com/ ou http://headjs.com

Capsule
la source
5
Il existe des raisons valables de combiner des fichiers javascript. D'une part, il est fort possible que la demande de 20 fichiers de 2 ko prenne plus de temps que la demande d'un fichier de 40 ko.
Joel B
1
Que se passe-t-il combien de fois par millénaire?
Capsule
4
Plus souvent que vous ne le pensez. Jetez un œil même au code source de stackoverflow: "... L'option B n'est pas recommandée car elle oblige votre navigateur à faire de nombreuses requêtes pour tous les petits fichiers individuels .js (lent) plutôt qu'une seule requête pour un .js plus grand. fichier (plus rapide). "
Joel B
4
@Capsule Je déteste vous le dire, mais Internet passe rapidement de jQuery à MVC JavaScript, le chargement d'un fichier sera toujours plus rapide que le déclenchement de plusieurs requêtes HTTP.
Foxhoundn
1
@Foxhoundn Internet passe également rapidement à HTTP2, donc cela n'aura plus vraiment d'importance. Quoi qu'il en soit, jQuery n'était qu'un exemple, vous pourriez faire face exactement au même problème avec MVC JS
Capsule
7

Copiez ce script dans le bloc-notes et enregistrez-le en tant que fichier .vbs. Faites glisser et déposez les fichiers .js sur ce script.

ps. Cela ne fonctionnera que sur Windows.

set objArgs = Wscript.Arguments
set objFso = CreateObject("Scripting.FileSystemObject")
content = ""

'Iterate through all the arguments passed
for i = 0 to objArgs.count  
    on error resume next
    'Try and treat the argument like a folder
    Set folder = objFso.GetFolder(objArgs(i))
    'If we get an error, we know it is a file
    if err.number <> 0 then
        'This is not a folder, treat as file
        content = content & ReadFile(objArgs(i))
    else
        'No error? This is a folder, process accordingly
        for each file in folder.Files
            content = content & ReadFile(file.path)
        next
    end if
    on error goto 0
next

'Get system Temp folder path
set tempFolderPath = objFso.GetSpecialFolder(2)
'Generate a random filename to use for a temporary file
strTempFileName = objFso.GetTempName
'Create temporary file in Temp folder
set objTempFile = tempFolderPath.CreateTextFile(strTempFileName)
'Write content from JavaScript files to temporary file
objTempFile.WriteLine(content)
objTempFile.Close

'Open temporary file in Notepad
set objShell = CreateObject("WScript.Shell")
objShell.Run("Notepad.exe " & tempFolderPath & "\" & strTempFileName)


function ReadFile(strFilePath)
    'If file path ends with ".js", we know it is JavaScript file
    if Right(strFilePath, 3) = ".js" then       
        set objFile = objFso.OpenTextFile(strFilePath, 1, false)
        'Read entire contents of a JavaScript file and returns it as a string
        ReadFile = objFile.ReadAll & vbNewLine
        objFile.Close
    else
        'Return empty string
        ReadFile = ""
    end if  
end function
SasHok.Tk
la source
5

Vous pouvez utiliser le compilateur Closure comme le suggère orangutancloud. Il est intéressant de noter que vous n'avez pas réellement besoin de compiler / réduire le JavaScript, il devrait être possible de simplement concaténer les fichiers texte JavaScript en un seul fichier texte. Rejoignez-les simplement dans l'ordre dans lequel ils sont normalement inclus dans la page.

Jim Blackler
la source
Oui, bon point. Le compilateur de fermeture peut être délicat si vous ou les auteurs du plugin ne respectez pas la bonne syntaxe, ou si vous essayez de déboguer. Mais si vous l'utilisez dans le mode le plus basique, cela peut être utile. Personnellement, j'aime beaucoup Dojo et j'utilise leur système de construction avec des projets de dojo, cela aide vraiment à tout garder dans un seul fichier. Mais cela n'est utile que pour le déploiement, pas pour le développement.
Tom Gruner
4

Si vous utilisez PHP, je recommande Minify car il combine et réduit à la volée pour CSS et JS. Une fois que vous l'avez configuré, travaillez comme d'habitude et il s'occupe de tout.

technoTarek
la source
4

Vous pouvez utiliser KjsCompiler: https://github.com/knyga/kjscompiler Cool dependency management

Oleksandr Knyga
la source
Je cherchais des outils comme celui-ci depuis des heures, mais finalement cela fonctionne exactement comme je l'imaginais. Simple et direct.
Gergely Kovács
2

Vous pouvez utiliser un script que j'ai créé. Vous avez besoin de JRuby pour exécuter cela. https://bitbucket.org/ardee_aram/jscombiner (JSCombiner).

Ce qui le distingue, c'est qu'il surveille les modifications de fichiers dans le javascript et les combine automatiquement au script de votre choix. Il n'est donc pas nécessaire de "construire" manuellement votre javascript à chaque fois que vous le testez. J'espère que cela vous aidera, je l'utilise actuellement.

Ardee Aram
la source
0

Cela peut être un peu d'effort mais vous pouvez télécharger mon projet wiki open-source à partir de codeplex:

http://shuttlewiki.codeplex.com

Il contient un projet CompressJavascript (et CompressCSS) qui utilise le projet http://yuicompressor.codeplex.com/ .

Le code devrait être explicite mais cela simplifie un peu la combinaison et la compression des fichiers --- pour moi en tout cas :)

Le projet ShuttleWiki montre comment l'utiliser dans l'événement post-build.

Eben Roux
la source