Npm के माध्यम से ट्विटर बूटस्ट्रैप स्थापित करने का उद्देश्य?


236

प्रश्न 1:

वास्तव में n n के माध्यम से ट्विटर बूटस्ट्रैप को स्थापित करने का उद्देश्य क्या है? मुझे लगा कि npm सर्वर साइड मॉड्यूल के लिए था। क्या CDN का उपयोग करने की तुलना में बूटस्ट्रैप फ़ाइलों की सेवा करना अधिक तेज़ है?

प्रश्न 2:

अगर मैं बूटस्ट्रैप को एनपीएम करने के लिए था, तो मैं बूटस्ट्रैप.जेएस और बूटस्ट्रैप.एससी फाइलों को कैसे इंगित करूंगा?


9
मुख्य उपयोग मामला जिसके बारे में मैं सोच सकता हूं कि आपके फ्रंटएंड JS विकास के लिए Browserify का उपयोग किया जा रहा है ।
cvrebert

1
@cvrebert: tl प्रदान करने के लिए धन्यवाद; डॉउन का उत्तर :)
इवान डर्स्ट

जवाबों:


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

    अब, बूटस्ट्रैप के npm पैकेज की बात

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

  2. इसे कैसे उपयोग करे

    निम्नलिखित परियोजना संरचना की कल्पना करें:

    परियोजना
    | - node_modules
    | - जनता
    | | - सीएसएस
    | | - img
    | | - जे एस
    | | - index.html
    - पैकेज। json
    
    

अपने में index.htmlआप इस तरह से cssऔर jsफ़ाइलों को संदर्भित कर सकते हैं :

<link rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.min.css">
<script src="../node_modules/bootstrap/dist/js/bootstrap.min.js"></script>

जो सबसे सरल तरीका है, और .cssफाइलों के लिए सही है । लेकिन bootstrap.jsआपकी public/js/*.jsफ़ाइलों में कहीं न कहीं इस तरह की फ़ाइल को शामिल करना बेहतर है :

var bootstrap = require('bootstrap');

और आप इस कोड को केवल उन javascriptफाइलों में शामिल करते हैं, जहां आपको वास्तव में जरूरत है bootstrap.jsBrowserify आपके लिए इस फाइल को शामिल करने का ध्यान रखता है।

अब, दोष यह है कि आपके पास अब node_modulesनिर्भरता के रूप में आपके सामने के अंत की फाइलें हैं , और node_modulesफ़ोल्डर को आमतौर पर चेक इन नहीं किया जाता है git। मुझे लगता है कि यह सबसे विवादास्पद हिस्सा है, जिसमें कई राय और समाधान हैं


UPDATE मार्च 2017

इस उत्तर को लिखे हुए मुझे लगभग दो साल बीत चुके हैं और एक अद्यतन जगह में है।

अब आम तौर पर स्वीकृत तरीका एक निर्माण चरण में अपनी सभी संपत्तियों को बंडल करने के लिए वेबपैक (या पसंद का एक और बंडलर) जैसे बंडल का उपयोग करना है।

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

const bootstrap = require('bootstrap');

के रूप में cssफ़ाइलें, webpack तो "कहा जाता है लोडर "। वे आपको अपने js कोड में यह लिखने की अनुमति देते हैं:

require('bootstrap/dist/css/bootstrap.css');

और सीएसएस फाइलें आपके निर्माण में शामिल "जादुई" होंगी। <style />जब आपका ऐप चलता है तो उन्हें गतिशील रूप से टैग के रूप में जोड़ा जाएगा , लेकिन आप उन्हें एक अलग cssफ़ाइल के रूप में निर्यात करने के लिए वेबपैक कॉन्फ़िगर कर सकते हैं । आप वेबपैक के प्रलेखन में इसके बारे में अधिक पढ़ सकते हैं।

निष्कर्ष के तौर पर।

  1. आपको एक बंडल के साथ अपना ऐप कोड "बंडल" करना चाहिए
  2. आपको न तो node_modulesऔर न ही डायनेमिक रूप से निर्मित फ़ाइलों को तैयार करना चाहिए । आप buildnpm पर एक स्क्रिप्ट जोड़ सकते हैं जिसका उपयोग सर्वर पर फ़ाइलों को तैनात करने के लिए किया जाना चाहिए। वैसे भी, यह आपके पसंदीदा निर्माण प्रक्रिया के आधार पर विभिन्न तरीकों से किया जा सकता है।

1
मैंने अभी ऐसा किया है, लेकिन लोकलहोस्ट: 3000 / बूटस्ट्रैप 404 (नहीं मिला) पर मिलते रहें , इस पर कोई विचार?
23

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

मेरा कहना है कि वेबपैक का उत्तर सही है। लेकिन ओपी प्रश्न का उत्तर देने के लिए: यदि स्क्रिप्ट / स्टाइलशीट लोड की गई है तो परीक्षण करने का कोई साफ तरीका नहीं है। HTTP / 2 इन समस्याओं को बहुसंकेतन के साथ हल कर सकता है। लेकिन अधिकांश भाग के लिए, आप deferअपनी स्क्रिप्ट या आलसी लोड फ़ाइलों पर वेबपैक और विशेषता का उपयोग कर सकते हैं
Tamb

190

यदि आप उन मॉड्यूलों को एनपीएम करते हैं, तो आप स्थैतिक पुनर्निर्देशन का उपयोग करके उनकी सेवा कर सकते हैं।

पहले पैकेज स्थापित करें:

npm install jquery
npm install bootstrap

फिर server.js पर:

var express = require('express');
var app = express();

// prepare server
app.use('/api', api); // redirect API calls
app.use('/', express.static(__dirname + '/www')); // redirect root
app.use('/js', express.static(__dirname + '/node_modules/bootstrap/dist/js')); // redirect bootstrap JS
app.use('/js', express.static(__dirname + '/node_modules/jquery/dist')); // redirect JS jQuery
app.use('/css', express.static(__dirname + '/node_modules/bootstrap/dist/css')); // redirect CSS bootstrap

फिर, आखिरकार .html पर:

<link rel="stylesheet" href="/css/bootstrap.min.css">
<script src="/js/jquery.min.js"></script>
<script src="/js/bootstrap.min.js"></script>

मैं उस फ़ोल्डर से सीधे पृष्ठों की सेवा नहीं करूँगा जहाँ आपकी server.js फ़ाइल है (जो आमतौर पर नोड_मॉड्यूल्स के समान है) जैसा कि समय- सीमा के अनुसार प्रस्तावित किया जाता है , उस तरह से लोग आपके server.js फ़ाइल तक पहुँच सकते हैं।

बेशक, आप बस डाउनलोड कर सकते हैं और अपने फ़ोल्डर में कॉपी और पेस्ट कर सकते हैं, लेकिन एनपीएम के साथ आप बस जरूरत पड़ने पर अपडेट कर सकते हैं ... आसान, मुझे लगता है।


2
वेब तूफान द्वारा उत्पन्न एक एक्सप्रेस नोड प्रोजेक्ट के साथ काम करने वालों के लिए, आपको अपने ऐप में कोड जोड़ना होगा। जेएस
केमिकोफा भूत

मैंने कभी भी सर्वर के फाइलों के साथ स्थिर फ्रंट-एंड फ़ाइलों को रखने का प्रस्ताव नहीं किया।
टाइमवॉन्डर

क्या आप जेएस फ़ाइल लोड करते समय या तैयार हैंडलर के अंदर उन कॉल को करते हैं?
पुतीनो

@ पाब्लो, मैं इसे बिल्कुल शुरुआत में उपयोग करता हूं, जैसे कोड स्निपेट में।
ऑगस्टो गोंकाल्वेस

1
एक ही /jsमार्ग को दो अलग-अलग निर्देशिकाओं पर पुनर्निर्देशित कैसे किया जा सकता है ? यह प्रत्येक में परस्पर विरोधी फाइलें कैसे संभालेगा?
याकूब फोर्ड

72

उत्तर 1:

  • Npm (या bower) के माध्यम से बूटस्ट्रैप डाउनलोड करना आपको कुछ विलंबता समय प्राप्त करने की अनुमति देता है। एक दूरस्थ संसाधन प्राप्त करने के बजाय, आपको एक स्थानीय मिलता है, यह जल्दी है, सिवाय इसके कि अगर आप सीडीएन का उपयोग करते हैं (नीचे दिए गए उत्तर की जांच करें)

  • "एनपीएम" मूल रूप से नोड मॉड्यूल प्राप्त करने के लिए था, लेकिन जावास्क्रिप्ट भाषा (और ब्राउजर के आगमन) के निबंध के साथ, यह थोड़ा बड़ा हो गया है। वास्तव में, आप npm पर AngularJS भी डाउनलोड कर सकते हैं, यह सर्वर साइड फ्रेमवर्क नहीं है। Browserify आपको क्लाइंट साइड पर AMD / आवश्यकता / कॉमनज का उपयोग करने की अनुमति देता है ताकि क्लाइंट मॉड्यूल पर नोड मॉड्यूल का उपयोग किया जा सके।

उत्तर 2:

यदि आप npm बूटस्ट्रैप स्थापित करते हैं (यदि आप किसी विशिष्ट फ़ोल्डर में जाने के लिए किसी विशेष ग्रन्ट या गल्प फाइल का उपयोग नहीं करते हैं), तो आपका बूटस्ट्रैप "./node_modules/bootstrap/bootstrap.min.css" में स्थित होगा यदि मैं गलत नहीं हूँ।


5
आप एक कॉपी कमांड का उपयोग कर सकते हैं और इसे npm रन , ग्रन्ट टास्क या गल्प टास्क के माध्यम से कॉल कर सकते हैं । ऐसा करने से, मुझे निर्देशिका "नोड_मॉड्यूल्स" को नियंत्रित करने की आवश्यकता नहीं है (निर्देशिका निर्माण / तैनाती के समय "एनपीएम इंस्टॉल करें"), और मैं इसके बजाय "./nn_modules/bootstrap" शैलियों / bootstrap.min.css का संदर्भ दे सकता हूं। /bootstrap.min.css "।
आशीर्वाद याहु जूल

यदि फ़ाइलों की प्रतिलिपि बनाने के लिए एक नकारात्मक पहलू है, तो यह स्वाभाविक रूप से है कि आपके रेपो में उन निर्भरता की दो प्रतियां होंगी। @Augusto द्वारा उल्लिखित स्थिर पुनर्निर्देशन विधि अधिक कुशल लगती है।
एस्ट्रैपल्स

3
  1. बूटस्ट्रैप को स्थापित करने के लिए npm / bower का उपयोग करें यदि आप इसे recompile करना चाहते हैं / कम फाइलें / परीक्षण बदलते हैं। ग्रंट के साथ ऐसा करना आसान होगा, जैसा कि http://getbootstrap.com/getting-started/#grunt पर दिखाया गया है । यदि आप केवल पहले से तैयार किए गए पुस्तकालयों को जोड़ना चाहते हैं, तो प्रोजेक्ट में मैन्युअल रूप से फ़ाइलों को शामिल करें।

  2. नहीं, आपको इसे स्वयं करना होगा या अलग ग्रंट टूल का उपयोग करना होगा। उदाहरण के लिए ' ग्रंट-कॉनरीब-कॉनकट ' कैसे ग्रन्ट.जेएस (0.3.x) के साथ कई सीएसएस और जावास्क्रिप्ट फ़ाइलों को संक्षिप्त और छोटा करें।

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