2017-05-19 17 views
6

के साथ बैकएंड एक्सप्रेस/डब्ल्यूएस नोड ऐप का निर्माण करते समय चेतावनी वेबपैक के साथ बैकएंड नोड सर्वर बनाने के दौरान मुझे कुछ भ्रमित चेतावनियां मिल रही हैं। मैं Webpack उपयोग करने के लिए दो कारणों के लिए मुख्य रूप से मेरी बैकएंड का निर्माण करना चाहते:वेबपैक

  • Webpack एक एकल निष्पादन योग्य फ़ाइल है, जो आसान है तैनात करने के लिए
  • Webpack मेरे ऐप की निर्भरता के सभी शामिल हैं बनाता है, इसलिए मैं अपने एप्लिकेशन तैनात कर सकते हैं पहले निर्भरता इंस्टॉल किए बिना किसी भी संगत नोड वातावरण

यहाँ चेतावनी मैं हो रही हैं:

WARNING in ./~/ws/lib/BufferUtil.js 
Module not found: Error: Can't resolve 'bufferutil' in .../node_modules/ws/lib 
@ ./~/ws/lib/BufferUtil.js 35:21-42 
@ ./~/ws/lib/Receiver.js 
@ ./~/ws/index.js 
@ ./src/main.js 

WARNING in ./~/ws/lib/Validation.js 
Module not found: Error: Can't resolve 'utf-8-validate' in .../node_modules/ws/lib 
@ ./~/ws/lib/Validation.js 10:22-47 
@ ./~/ws/lib/Receiver.js 
@ ./~/ws/index.js 
@ ./src/main.js 

WARNING in ./~/express/lib/view.js 
80:29-41 Critical dependency: the request of a dependency is an expression 

के लिएचेतावनी, मुझे good example समस्या मिली है और ContextReplacementPlugin का उपयोग करने के तरीके पर कुछ दस्तावेज मिले हैं, हालांकि यह अभी भी अस्पष्ट है कि इस स्थिति में इसे कैसे लागू किया जाए। ऐसा लगता है कि चेतावनी node_modules/express/lib/view.js में लाइन 80 की वजह से किया जा रहा है:

opts.engines[this.ext] = require(mod).__express 

यह मेरे लिए स्पष्ट है कि निर्भरता का निर्माण समय में हल नहीं किया जा सकता है, तो मैं ContextReplacementPlugin कैसे उपयोग इस निर्भरता ठीक करने के लिए कर सकते हैं?

Module not foundws पैकेज में चेतावनियों के लिए, यह स्पष्ट नहीं है कि क्या हो रहा है। ऐसा लगता है कि उन निर्भरताओं को मेरे वैश्विकnode_modules में मौजूद है, और शायद उन्हें वेबपैक द्वारा खींचा नहीं जा रहा है। मैंने उन्हें अपने प्रोजेक्ट की devDependencies में जोड़ने का प्रयास किया है, लेकिन फिर मुझे इसके लिए Critical dependency चेतावनियां मिलती हैं।

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

"devDependencies": { 
    "@types/cassandra-driver": "^0.8.10", 
    "@types/express": "^4.0.35", 
    "@types/uuid": "^2.0.29", 
    "@types/ws": "0.0.40", 
    "nodemon": "^1.11.0", 
    "typescript": "^2.3.1", 
    "webpack": "^2.5.1" 
    }, 
    "dependencies": { 
    "cassandra-driver": "^3.2.1", 
    "express": "^4.15.2", 
    "uuid": "^3.0.1", 
    "ws": "^2.3.1" 
    } 

और यहाँ मेरी webpack.config.js:


यहाँ मेरी package.json में मेरी निर्भरता हैं

const path = require('path'); 

module.exports = { 
    entry: './src/main.js', 
    output: { 
    path: path.join(__dirname, 'dist'), 
    filename: 'main.js' 
    }, 
    target: 'node', 
    node: { 
    __dirname: false, 
    __filename: false 
    } 
}; 

मैं चीजों को कम से कम संभव हो तो ध्यान में रखते हुए की तरह। पढ़ने के लिए धन्यवाद।

+0

के बाद से Webpack ब्राउज़र अनुप्रयोगों के निर्माण के लिए है, आप webpack डिफ़ॉल्ट व्यवहार के कुछ से बचने के लिए एक सा आपके विन्यास बदलाव करने की आवश्यकता होगी। यह शुरू करने के लिए एक अच्छा पठन है: http://jlongster.com/Backend-Apps-with-Webpack--Part-I –

+0

@toomuchdesign लिंक के लिए धन्यवाद, लेकिन ऐसा लगता है कि समाधान इमारत के दौरान निर्भरताओं को बंडल नहीं कर रहा है बैकएंड ऐप, जो मैं नहीं ढूंढ रहा हूं। मुझे इस तथ्य के आस-पास अपने सिर को लपेटने में थोड़ी सी परेशानी है कि नोड में बनाए गए ऐप्स केवल उन वातावरणों में भाग सकते हैं जिनके पास पहले से ही उनकी सभी निर्भरताएं स्थापित हैं। कई भाषाओं में बिल्ड-टाइम पर निर्भरताओं को शामिल करने के विकल्प हैं, यह नोड में लक्ष्य क्यों नहीं है? –

+0

आपके द्वारा उपयोग किए जाने वाले प्रत्येक नोड पर्यावरण (हेरोोकू, लोचदार बीनस्टॉक इत्यादि) जब आप अपना कोड तैनात करते हैं तो निर्भरता सर्वर पक्ष स्थापित करते हैं। पहले उन्हें स्थापित करने के लिए कोई और शर्त नहीं है। यहां तक ​​कि इस तरह के एक पर्यावरण के साथ आप बंडल की आवश्यकता के बिना तैनाती पर स्थापित करने के लिए एक हुक लिख सकते हैं? –

उत्तर

1

संक्षिप्त उत्तर

webpack नोड के साथ काम कर सकते हैं, लेकिन यह पालन की आवश्यकता होती है अलग नहीं कर सकता() बयान। काम करने के लिए आवश्यकताएं() को अनदेखा करने के लिए संशोधनों को बनाना होगा।

विस्तृत उत्तर

यह वास्तव में एक मास्टर फाइल में कुछ फ़ाइलें ले लेगा और कुछ मामलों में इसे चलाने के लिए संभव है।

  • एक उदाहरण है, तो सभी आवश्यक मॉड्यूल टाइपप्रति में लिखे गए हैं और मॉड्यूल एक दूर में लिखे गए हैं कि टाइपप्रति प्लगइन में मॉड्यूल पार्स कर सकते हैं, तो आप उपयोग कर रहे है।

  • एक और उदाहरण होगा es6 बेबेल प्लगइन्स और es6 शैली आयात का उपयोग कर।

यहां तक ​​कि इसके बाद के संस्करण परिदृश्यों में गलती कुछ फ़ाइलों

अंतिम जवाब में खींचने के लिए नहीं चुन सकते हैं

यह वास्तव में मामला बहुत लंबा जवाब क्योंकि निष्पादित करने का प्रयास के बारे में ज्यादा नहीं करना चाहिए मॉड्यूल बूट में स्मृति में संग्रहीत होते हैं और फिर बाद में कैश से संदर्भित होते हैं। अधिक जानकारी के लिए नीचे आलेख देखें।

http://fredkschott.com/post/2014/06/require-and-the-module-system/