मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन यह उल्लेख करना उपयोगी होगा कि वेबपैक स्क्रिप्ट लोडर इस मामले में भी उपयोगी हो सकता है। वेबपैक डॉक्स से:
"स्क्रिप्ट: वैश्विक संदर्भ (जैसे स्क्रिप्ट टैग) में एक बार जावास्क्रिप्ट फ़ाइल निष्पादित करता है, की आवश्यकता नहीं है।"
http://webpack.github.io/docs/list-of-loaders.html
https://github.com/webpack/script-loader
मुझे यह विशेष रूप से उपयोगी लगता है जब जेएस विक्रेता फ़ाइलों और ऐप फ़ाइलों को एक साथ जोड़ने वाली पुरानी बिल्ड प्रक्रियाओं को माइग्रेट करता है। चेतावनी का एक शब्द यह है कि स्क्रिप्ट लोडर केवल ओवरलोडिंग के माध्यम से काम करने लगता है require()
और जहां तक मैं एक webpack.config फ़ाइल में निर्दिष्ट करके बता सकता हूं, वह काम नहीं करता है। हालांकि, कई तर्क देते हैं कि ओवरलोडिंग require
खराब अभ्यास है, यह एक बंडल में वेंडर और ऐप स्क्रिप्ट को छिपाने के लिए काफी उपयोगी हो सकता है, और साथ ही जेएस ग्लोबल्स को उजागर करने के लिए इसके अलावा वेबपैक बंडल में शर्मिंदा होने की आवश्यकता नहीं है। उदाहरण के लिए:
require('script!jquery-cookie/jquery.cookie');
require('script!history.js/scripts/bundled-uncompressed/html4+html5/jquery.history');
require('script!momentjs');
require('./scripts/main.js');
यह इस बंडल के अंदर और बाहर $ .cookie, History और क्षण को विश्व स्तर पर उपलब्ध कराएगा, और इन विक्रेता के लिबास को main.js स्क्रिप्ट के साथ बंडल करेगा और यह सब require
d फाइल है।
इसके अलावा, इस तकनीक के साथ उपयोगी है:
resolve: {
extensions: ["", ".js"],
modulesDirectories: ['node_modules', 'bower_components']
},
plugins: [
new webpack.ResolverPlugin(
new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin("bower.json", ["main"])
)
]
जो कि Bower का उपयोग कर रहा है, main
प्रत्येक require
d पुस्तकालयों के पैकेज में फाइल को देखेगा । उपरोक्त उदाहरण में, History.js में कोई main
फ़ाइल निर्दिष्ट नहीं है , इसलिए फ़ाइल के लिए पथ आवश्यक है।
new
से पहले जोड़ना चाहिएwebpack.ProvidePlugin