2016-06-23 16 views
5

के माध्यम से विश्व स्तर पर जावास्क्रिप्ट लाइब्रेरी आयात करें मैं अपने एचटीएमएल से जावास्क्रिप्ट पुस्तकालयों के लिए स्क्रिप्ट टैग को हटाने की कोशिश कर रहा हूं, और इसलिए टेम्पलेट पेज से underscore.js को हटा दिया है।वेबपैक

मेरी index.js (webpack प्रवेश बिंदु) के भीतर इस बदलने के लिए,, मैं निम्नलिखित है

import 'underscore'; 

webpack 50 के द्वारा फ़ाइल बढ़ जाती है bundle.js outputted जब मैं यह कर के आकार, तो मैं पता है कि पुस्तकालय bundle.js में है। हालांकि, अंडरस्कोर उपलब्ध नहीं है जब मैं इसे उस पृष्ठ पर कंसोल में उपयोग करने का प्रयास करता हूं जिसमें bundle.js शामिल है।

किसी भी विचार की सराहना की जाएगी।

const webpack = require('webpack'); 
const path = require('path'); 
const precss = require('precss'); 
const autoprefixer = require('autoprefixer'); 
const ExtractTextPlugin = require('extract-text-webpack-plugin'); 
const postcssImport = require('postcss-import'); 

module.exports = { 

    context: __dirname + '/frontend', 
    devtool: 'source-map', 
    entry: './index.js', 
    output: { 
    filename: 'bundle.js', 
    path: path.join(__dirname, './static'), 
    }, 
    module: { 
    loaders: [ 
    { test: /\.js$/, loader: 'babel', exclude: /node_modules/, query: { presets: ['es2015'] } }, 
    { test: /\.css$/, loader: ExtractTextPlugin.extract('style', 'css?sourceMap&importLoaders=1!postcss') }, 
    ], 
    }, 
    vendor: [ 
    'underscore', 
    ], 
    plugins: [ 
    new ExtractTextPlugin('si-styles.css'), 
    new webpack.ProvidePlugin({ 
     underscore: 'underscore', 
    }), 
    ], 
    postcss: function(webpack) { 
    return [ 
     postcssImport({ addDependencyTo: webpack }), // Must be first item in list 
     precss, 
     autoprefixer({ browsers: ['last 2 versions'] }), 
    ]; 
    }, 

}; 
+1

आप '_' को कॉल नहीं कर सकते हैं, भले ही आपने इसे अपने मॉड्यूल में आयात किया हो, क्योंकि ES6' import' कथन जैसे मॉड्यूल सिस्टम को वैश्विक स्थान प्रदूषण से बचने के लिए डिज़ाइन किया गया है। उस मॉड्यूल को वैश्विक दायरे या वैश्विक ऑब्जेक्ट ('विंडो') में निर्दिष्ट करने के लिए आपको कुछ संदर्भ देने की आवश्यकता होगी ताकि आप इसका संदर्भ प्राप्त कर सकें और इसे अपने मॉड्यूल में से किसी एक के बाहर उपयोग कर सकें जहां आपने इसे आयात किया था। किसी भी मॉड्यूल के लिए वेबपैक को आपके लिए ऐसा करने के लिए वेबपैक दस्तावेज़ देखें [https://webpack.github.io/docs/shimming-modules.html)। –

उत्तर

5

आदेश प्राप्त करने के लिए है कि आप इस webpack प्लगइन का उपयोग कर सकते हैं: जिस तरह से यह द्वारा

new webpack.ProvidePlugin({ 
    underscore: "underscore" 
}) 

है कि आप अपने निर्देशिका की अनुक्रमणिका फ़ाइल में पुस्तकालय आयात आवश्यक नहीं है। आप पुस्तकालय भी अपने webpack कॉन्फ़िग फ़ाइल में एक नई प्रविष्टि बिंदु निर्दिष्ट करने के लिए उपयोग होगा .. तब आप अपने सभी विक्रेता कोड एक vendor.js boundle में इतनी तरह डाल सकता है:

entry: { 
    main: [ 
     './app/js/main.js' 
    ], 
    vendor: [ 
      'underscore', 
      'lodash', 
      'my-awesome-library!' 
     ] 
    } 

अद्यतन: वहाँ एक बहुत है अंडेहेड.io पर उत्पादन में वेबपैक का उपयोग करने के तरीके में अच्छा ट्यूटोरियल .. check it out पर आज़माएं!

+0

बहुत बहुत धन्यवाद, यह काम किया है! क्या आप यह बताने में सक्षम हैं कि क्यों यह bundle.js में शामिल हो रहा था, यह उपयोग करने के लिए उपलब्ध नहीं था? –

+0

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

+0

के साथ अपना मूल प्रश्न अपडेट करूंगा, मुझे यह जांचने दो कि मैंने आपको दूसरे भाग पर एक बुरा सलाह नहीं दी है (आयात को हटाएं) यह मेरे लिए काम कर रहा है, लेकिन मैंने नहीं किया enaugh की जांच नहीं करें ... आपके पहले प्रश्न से क्या संबंध है, मुझे लगता है कि इसे वेबपैक आयात करने वाले सभी मॉड्यूल का नाम बदलने के तरीके के साथ करना है। आपको अपने कोड में ब्रेकपॉइंट डालने का प्रयास करना चाहिए और कंसोल का उपयोग करना चाहिए जो चर नाम हैं ... मुझे आशा है कि इससे मदद मिलेगी .. – piratz