एक जावास्क्रिप्ट फाइल में कई जावास्क्रिप्ट फाइलों को मिलाएं [बंद]


91

मैं अपने वेब एप्लिकेशन में jquery का उपयोग कर रहा हूं और मुझे jquery स्क्रिप्ट फ़ाइलों को एक पृष्ठ में लोड करने की आवश्यकता है।

Google ने सुझाव दिया कि मैं सभी jquery स्क्रिप्ट फ़ाइलों को एक ही फ़ाइल में संयोजित करूँ।

मैं यह कैसे कर सकता हूँ?

जवाबों:


53

लिनक्स पर आप एक से अधिक जावास्क्रिप्ट फ़ाइलों को एक में संयोजित करने के लिए सरल शेल स्क्रिप्ट https://github.com/dfsq/compressJS.sh का उपयोग कर सकते हैं । यह क्लोजर कंपाइलर ऑनलाइन सेवा का उपयोग करता है ताकि परिणामस्वरूप स्क्रिप्ट भी प्रभावी रूप से संपीड़ित हो।

$ ./compressJS.sh some-script.js another-sctipt.js onemore.js

1
क्या यह हैंडलबार के साथ काम कर सकता है?
डैन बेकर

3
ग्रंट, गुलाब और अन्य सामान जैसे कार्य प्रबंधक का उपयोग करने के लिए बेहतर है कि स्वचालित रूप से ऐसा करें। ग्रंट का उपयोग करते हुए मैं अपने कम, टाइपस्क्रिप्ट, जेनरेट किए गए फ़ोल्डर में हैंडलबार्स को संकलित करता हूं, फिर मैं जेएस / सीएसएस फाइलों को जेनरेट किए गए फ़ोल्डर में कॉपी करता हूं, अंत में मैं सभी जेएस फाइल में एक जेएस फाइल में और एक सीएसएस फाइलल में भी मिनिमाइज करता हूं। सभी .css फ़ाइलें। और मेरे पास एक चौकीदार है जो फ़ाइल परिवर्तन पर कॉन्फ़िगरेशन को फिर से कॉन्फ़िगर करता है ताकि मैं फ़ाइल को सहेज सकूं और ब्राउज़र को रिफ्रेश कर सकूं और सभी बदलाव 1-3 सेकंड के भीतर लागू हो गए।
वडकोरक्वेस्ट


18

बस पाठ फ़ाइलों को संयोजित करें और फिर YUI कंप्रेसर की तरह कुछ का उपयोग करें

कमांड का उपयोग करके फ़ाइलों को आसानी से जोड़ा जा सकता है cat *.js > main.jsऔर main.js तो YUI कंप्रेसर का उपयोग करके चलाया जा सकता हैjava -jar yuicompressor-x.y.z.jar -o main.min.js main.js

अद्यतन अगस्त 2014

मैंने अब जावास्क्रिप्ट कॉन्टेक्टेशन और कम्प्रेशन के लिए विभिन्न प्लगइन्स और कुछ न्यूनतम कॉन्फ़िगरेशन के साथ गुलप का उपयोग करने के लिए माइग्रेट किया है ।


1
फिक्स्ड @reformed।
२०:०४ में प्राइडी

11

आप इसके माध्यम से कर सकते हैं

  • ए। मैन्युअल रूप से: एक में सभी जावास्क्रिप्ट फ़ाइलों की प्रतिलिपि, उस पर एक कंप्रेसर चलाएं ( वैकल्पिक लेकिन अनुशंसित ) और सर्वर पर अपलोड करें और उस फ़ाइल से लिंक करें।
  • ख। PHP का उपयोग करें: बस सभी JS फ़ाइलों और includeउन सभी की एक सरणी बनाएं और एक <script>टैग में आउटपुट करें

1
विकल्प बी की अनुशंसा नहीं की जाती है क्योंकि यह आपके ब्राउज़र को सभी छोटे व्यक्तिगत .js फ़ाइलों (धीमी) के लिए कई अनुरोध करने के बजाय बड़े .js फ़ाइल (तेज़) के लिए केवल एक अनुरोध करता है।
मिकपोते

5
@ मायकेपोटे, हां ... इसलिए मैंने इस शब्द का उपयोग किया है includeअर्थात <script src = "...."> कई फाइलों से लिंक नहीं है, बस उन्हें एक स्क्रिप्ट तत्व में शामिल करें। आदर्श रूप से उचित कैशिंग के साथ एक सीडीएन का उपयोग किया जाना चाहिए।
गैरी ग्रीन

क्षमा करें, मैंने आपके उत्तर को गलत बताया।
माइकपोते 10

3
क्या आप यहाँ कुछ उदाहरण दे सकते हैं।
आनंद सोलंकी

पार्सिंग ओवरहेड से बचने और गलती से कुछ व्याख्या करने के लिए रीडफाइल () का उपयोग करना बेहतर है।
चिनोटो वोक्रो

9

मेरे पास आमतौर पर यह है 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)

फिर आप चलाते हैं:

make compile

मुझे उम्मीद है यह मदद करेगा।


8

मैं इस शेल स्क्रिप्ट का उपयोग लिनक्स https://github.com/eloone/mergejs पर करता हूं

उपरोक्त लिपियों की तुलना में इसका उपयोग करने के लिए बहुत सरल होने के फायदे हैं, और एक बड़ा प्लस यह है कि आप उन जेएस फाइलों को सूचीबद्ध कर सकते हैं जिन्हें आप इनपुट टेक्स्ट फाइल में मर्ज करना चाहते हैं और कमांड लाइन में नहीं, इसलिए आपकी सूची पुन: प्रयोज्य है आपको हर बार अपनी फ़ाइलों को मर्ज करने के लिए इसे टाइप करने की आवश्यकता नहीं है। यह बहुत आसान है क्योंकि आप इस चरण को हर बार दोहराएंगे जब आप उत्पादन में धकेलना चाहते हैं। आप उन फ़ाइलों को भी टिप्पणी कर सकते हैं जिन्हें आप सूची में मर्ज नहीं करना चाहते हैं। आपके द्वारा सबसे अधिक संभावित प्रकार की कमांड लाइन है:

$ mergejs js_files_list.txt output.js

और अगर आप भी परिणामी विलय फ़ाइल को संपीड़ित करना चाहते हैं:

$ mergejs -c js_files_list.txt output.js

यह output-min.jsGoogle के क्लोजर कंपाइलर द्वारा बनाया जाएगा । या:

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

यदि आप अपनी नामांकित फ़ाइल के लिए एक विशिष्ट नाम चाहते हैं output.minified.js

मुझे यह एक साधारण वेबसाइट के लिए वास्तव में उपयोगी लगता है।


7

स्क्रिप्ट समूहीकरण उल्टा है, तो आपको उन्हें http://yepnopejs.com/ या http://headjs.com जैसी किसी चीज़ का उपयोग करके समानांतर में लोड करना चाहिए


5
जावास्क्रिप्ट फ़ाइलों के संयोजन के लिए वैध कारण हैं। एक के लिए, यह बहुत संभव है कि 20 2kb फ़ाइलों का अनुरोध करने में एक 40 kb फ़ाइल का अनुरोध करने में अधिक समय लगेगा।
जोएल बी

1
प्रति मिलीनियम कितनी बार होता है?
कैप्सूल

4
जितनी बार आप सोचेंगे। स्टैकओवरफ़्लो के स्रोत कोड पर भी एक नज़र डालें: "... विकल्प बी की अनुशंसा नहीं की जाती है क्योंकि यह आपके ब्राउज़र को सभी छोटे व्यक्तिगत .js फ़ाइलों (धीमी) के लिए कई अनुरोध करने के बजाय केवल एक बड़े .jpg के लिए अनुरोध करता है। फ़ाइल (तेज)
जोएल बी

4
@ कैप्शन मैं आपको बताने से नफरत करता हूं, लेकिन इंटरनेट जल्दी से jQuery से MVC जावास्क्रिप्ट पर जा रहा है, एक फ़ाइल लोड करना हमेशा कई HTTP अनुरोधों को फायर करने की तुलना में तेज होगा।
फॉक्सहाउंडन

1
@Foxhoundn इंटरनेट भी जल्दी से HTTP2 पर जा रहा है तो यह वास्तव में अब और नहीं होगा। वैसे भी, jQuery सिर्फ एक उदाहरण था, आप MVC JS के साथ ठीक वैसी ही समस्या का सामना कर सकते हैं
कैप्सूल

7

इस स्क्रिप्ट को नोटपैड में कॉपी करें और .vbs फ़ाइल के रूप में सहेजें। इस स्क्रिप्ट पर .js फ़ाइलें खींचें और छोड़ें।

ps। यह केवल खिड़कियों पर काम करेगा।

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

5

आप क्लोजर-कंपाइलर का उपयोग कर सकते हैं जैसा कि orangutancloud सुझाव देता है। यह इंगित करने योग्य है कि आपको वास्तव में जावास्क्रिप्ट को संकलित / संक्षिप्त करने की आवश्यकता नहीं है , यह जावास्क्रिप्ट पाठ फ़ाइलों को केवल एक पाठ फ़ाइल में संक्षिप्त करने के लिए संभव होना चाहिए। बस उन्हें उस क्रम में शामिल करें, जो वे आम तौर पर पृष्ठ में शामिल करते हैं।


हाँ, अच्छी बात है। क्लोजर कंपाइलर मुश्किल हो सकता है अगर आप या प्लगइन लेखक अच्छे सिंटैक्स के साथ नहीं रखते हैं, या यदि आप डिबग करने की कोशिश कर रहे हैं। लेकिन अगर आप इसे सबसे बुनियादी मोड में उपयोग करते हैं तो यह मददगार हो सकता है। मैं व्यक्तिगत रूप से Dojo को बहुत पसंद करता हूं और dojo प्रोजेक्ट्स के साथ उनके बिल्ड सिस्टम का उपयोग करता हूं, यह वास्तव में एक फाइल में सब कुछ रखने में मदद करता है। लेकिन यह केवल तैनाती के लिए उपयोगी है, विकास के लिए नहीं।
टॉम ग्रुनर

4

यदि आप PHP चला रहे हैं, तो मैं मिनिफाइ करने की सलाह देता हूं क्योंकि यह सीएसएस और जेएस दोनों के लिए फ्लाई पर कंबाइन और मिनीफाई करता है। एक बार जब आप इसे कॉन्फ़िगर कर लेते हैं, तो सामान्य रूप से काम करते हैं और यह सब कुछ ध्यान रखता है।


4

आप KjsCompiler का उपयोग कर सकते हैं: https://github.com/knyga/kjscompiler कूल निर्भरता प्रबंधन


मैं घंटों से इस तरह के औजारों की तलाश कर रहा हूं लेकिन आखिरकार यह ठीक उसी तरह काम करता है जैसे मैंने सोचा था कि यह काम करना चाहिए। सरल और सीधा।
गेर्गली कोवाक्स

2

आप मेरे द्वारा बनाई गई स्क्रिप्ट का उपयोग कर सकते हैं। हालांकि इसे चलाने के लिए आपको JRuby की जरूरत है। https://bitbucket.org/ardee_aram/jscombiner (JSCombiner)।

इसके अलावा जो सेट करता है, वह जावास्क्रिप्ट में फ़ाइल परिवर्तन देखता है, और इसे आपकी पसंद की स्क्रिप्ट में स्वचालित रूप से जोड़ता है। तो हर बार जब आप इसे टेस्ट करते हैं तो आपको अपनी जावास्क्रिप्ट को मैन्युअल रूप से "बिल्ड" करने की कोई आवश्यकता नहीं है। आशा है कि यह आपकी मदद करेगा, मैं वर्तमान में इसका उपयोग कर रहा हूं।


0

यह थोड़ा सा प्रयास हो सकता है लेकिन आप कोडपलेक्स से मेरे ओपन-सोर्स विकी प्रोजेक्ट को डाउनलोड कर सकते हैं:

http://shuttlewiki.codeplex.com

इसमें कंप्रेसजैवस्क्रिप्ट प्रोजेक्ट (और कंप्रेससीएसएस) शामिल है जो http://yuicompressor.codeplex.com/ प्रोजेक्ट का उपयोग करता है ।

कोड स्व-व्याख्यात्मक होना चाहिए, लेकिन यह फाइलों को थोड़ा सा सिम्प्लेयर के संयोजन और संपीड़ित करता है --- मेरे लिए वैसे भी :)

शटलविक्की परियोजना से पता चलता है कि इसे पोस्ट-बिल्ड ईवेंट में कैसे उपयोग किया जाए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.