2016-09-07 18 views
5

आमतौर पर, एक इलेक्ट्रॉन अनुप्रयोग में, आप दोनों मुख्य प्रक्रिया और रेंडरर प्रक्रिया से require नोड मॉड्यूल कर सकते हैं:की आवश्यकता होती है() नोड मॉड्यूल HTTP पर कार्य किया

var myModule = require('my-module'); 

बहरहाल, यह नहीं है ऐसा लगता है कि पृष्ठ स्थानीय फाइल सिस्टम के बजाय HTTP के माध्यम से लोड किया गया था। समस्याओं के बिना

win.loadURL(`file://${__dirname}/index.html`); 

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

win.loadURL(`http://localhost:1234/index.html`); 

कि मुझे अपनी वेब पेज के अंदर require नोड मॉड्यूल कर सकते हैं - मैं Uncaught Error: Cannot find module 'my-module' वेब पेज के कंसोल में मिलता है। क्या HTTP पर सेवा किए गए इलेक्ट्रॉन पृष्ठ में नोड मॉड्यूल का उपयोग करने का कोई तरीका है?


एक छोटी सी संदर्भ: मेरी कंपनी एक आवेदन है कि क्षमता एक वेब अनुप्रयोग और एक इलेक्ट्रॉन खोल के अंदर के रूप में की मेजबानी करने की आवश्यकता है बनाने जा रहा है। दोनों वातावरणों में यह सरल और सुसंगत बनाने के लिए, मेरा इलेक्ट्रॉन ऐप एक स्थानीय वेब सर्वर शुरू करता है और http://localhost:1234 पर होस्ट किया गया ऐप खोलता है। अब मैं electron-spell-check-provider का उपयोग कर आवेदन में वर्तनी जांच/वर्तनी सुझाव जोड़ने की क्षमता चाहूंगा। इस मॉड्यूल को रेंडरर प्रक्रिया के अंदर आयात और प्रारंभ करने की आवश्यकता है, इसलिए मैं अपने वेब पेज के अंदर require('electron-spell-check-provider') करने की कोशिश कर रहा हूं, लेकिन यह Cannot find module त्रुटि के साथ विफल रहता है।

+0

मुझे यकीन नहीं है, लेकिन ऐसा लगता है कि http संस्करण फ़ाइलों के लिए कुछ अलग वास्तविक पथ प्राप्त कर रहा है। आवश्यकता विवरण को बदलने का प्रयास करें: => "आवश्यकता ('./ इलेक्ट्रॉन-वर्तनी-जांच-प्रदाता')" –

+0

क्या आपने कोशिश की है: 'आवश्यकता (' इलेक्ट्रॉन ')। Remote.require (' इलेक्ट्रॉन-वर्तनी-जांच-प्रदाता ') '? – ahwayakchih

+0

क्या आप इसे समझने के लिए खत्म हो गए? remote.require() मेरे लिए काम करता है, लेकिन यह हमेशा एक अच्छा समाधान नहीं है। ऐसा करने का कोई और तरीका? – logidelic

उत्तर

-1

एक समान समस्या थी। फिर तो जैसे अपने index.html में HTTP पर renderer.js की सेवा की कोशिश करो,

<script src="/renderer.js"></script> 
</body> 

, docs के अनुसार बताया रिमोट का उपयोग में अपने मॉड्यूल लोड करने के बाद अपने renderer.js में की आवश्यकता होती है फ़ाइल।

var spellCheck = require('electron-spell-check-provider').remote;

+0

रेंडरर में क्या होगा? – Coder

1

अंत में यह पता लगा। मुख्य प्रक्रिया में,, node_modules निर्देशिका का निरपेक्ष पथ यह पता लगाने में के रूप में:

var nodeModDir = require.resolve('some-valid-module'); 
var dirnm  = 'node_modules'; 
var pos = nodeModDir.lastIndexOf(dirnm); 
if(pos != -1) 
    nodeModDir = nodeModDir.substr(0, pos+dirnm.length+1); 

अब कुछ भारतीय दंड संहिता के माध्यम से रेंडरर प्रक्रिया को यह पथ मिलता है। अंत में, रेंडरर में आप अब एक पूर्ण पथ का उपयोग की आवश्यकता होती है सकते हैं:

var mymod = require(nodeModDir+'some-valid-module'); 

इलेक्ट्रॉन 1.6.7 के साथ मेरे लिए पूरी तरह से काम करता है।

संबंधित मुद्दे