javascript - अनकही त्रुटि: मॉड्यूल 'jquery' नहीं ढूँढ सकता




node.js atom-editor (4)

मैं डेस्कटॉप ऐप बनाने के लिए Electron का उपयोग कर रहा हूं। अपने ऐप में मैं एक बाहरी साइट (एटम ऐप के बाहर) लोड कर रहा हूं जो http://mydummysite/index.html पेज कहता है।

यहाँ एटम संपादक में मेरे ऐप की संरचना है:

अर्थात इसके निम्नलिखित भाग हैं:

  1. main.js
  2. package.json
  3. nodemodules> jquery (jquery लोड करने के लिए)

सोर्स कोड:

main.js:

   'use strict';

    var app = require('app');

    app.on('ready', function() {
      var BrowserWindow = require('browser-window');

      var win = 
      new BrowserWindow({ width: 800, height: 600, show: false, 
               'node-integration':true });
      win.on('closed', function() {
        win = null;
      });

      win.loadUrl('http://mydummysite/index.html ');
      win.show();
    });

package.json:

{
  "name": "my-mac-app",
  "version": "5.2.0",
  "description": "My Mac Desktop App",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "Me",
  "license": "ISC",
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

बाहरी पेज - http://mydummysite/index.html पेज कोड:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <h1>Hello World!</h1>

  </body>
<script>

   var jqr=require('jquery');

</script>
</html>

जब मैं उपरोक्त एप्लिकेशन (इलेक्ट्रॉन में एप्लिकेशन फ़ोल्डर को खींचकर) बाहरी पेज ( http://mydummysite/index.html ) इलेक्ट्रॉन शेल में लोड करता http://mydummysite/index.html लेकिन "अनकवर्ड एरर:" मॉड्यूल 'jquery' नहीं ढूँढ सकता है।

क्या आप मुझे इस मुद्दे का कारण खोजने में मदद कर सकते हैं?

जैसा कि आप निर्देशिका संरचना के मेरे स्क्रीनशॉट में देख सकते हैं कि मैंने अपने फ़ोल्डर में इंस्टॉल किए गए jquery मॉड्यूल को स्थापित किया है और मैंने इसे "npm install jquery" कमांड के माध्यम से किया है।

नोट: जेएस में "आवश्यकता" कमांड के साथ खेलने के लिए मैंने अपने बाहरी पृष्ठ http://mydummysite/index.html पेज में "आवश्यकता (" ipc ") जोड़ने की कोशिश की और यह काम कर रहा था इसलिए आवश्यकता के साथ क्या कारण हो सकता है (") jQuery ")।

क्या मैंने इलेक्ट्रॉन में सही तरीके से बाहरी मॉड्यूल (jquery) जोड़ा है?

क्या मुझे package.json में कुछ निर्भरता याद आ रही है?

मैंने पहले से ही क्या प्रयास किया है:

  • npm कैश साफ, npm jquery इंस्टॉल करें (मेरे ऐप फ़ोल्डर में)
  • npm स्थापित - save jquery
  • npm jquery -g स्थापित करें
  • npm पुनर्निर्माण
  • sudo npm स्थापित करें jquery -g
  • sudo npm स्थापित करें jquery
  • NODE_PATH = / usr / स्थानीय / lib / node_modules निर्यात करें

यहाँ उस स्थान का स्क्रीनशॉट है जहाँ से मॉड्यूल में त्रुटि डाली गई है

क्या कोई सुझाव दे सकता है कि आवश्यकता क्यों है ("ipc") काम कर रहा है और आवश्यकता है ("jquery") नहीं?

मेरा लक्ष्य नोड-एकीकरण सच के साथ इलेक्ट्रॉन ऐप के साथ jQuery का उपयोग करना है।


Npm के साथ jquery स्थापित करना पर्याप्त नहीं है:

npm install --save jquery

यह आपकी परियोजना में jQuery के स्रोत फ़ाइलों को ठीक करता है। लेकिन आपको अपनी html फ़ाइल में स्क्रिप्ट को शामिल करना होगा:

<!DOCTYPE html>
<html>
  <head></head>

  <body>
      <h1>Hello World!</h1>
  </body>

  <!-- Try to load from cdn to exclude path issues. -->
  <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

  <script>
     window.jQuery = window.$ = jQuery;

     $(document).ready(function() {
         console.log( "jQuery is loaded" );
     });
  </script>

</html>

जब इलेक्ट्रॉन के साथ jQuery का उपयोग करते हुए मेरे पास एक ही मुद्दा है, और इन मामलों के लिए एक समाधान खोजें:

<script type="text/javascript" src="js/jquery.min.js"
 onload="window.$ = window.jQuery = module.exports;" ></script>

स्रोत: https://discuss.atom.io/t/electron-app-to-host-external-site/16390/9


यही मुद्दा मेरे साथ हुआ, एक सरल उपाय यह है कि इसे अपनी index.js फ़ाइल में जोड़ा जाए:

app.on('ready', function() {
      var mainWindow = new BrowserWindow({
        "node-integration": false
      })
//rest of your initialization code here.
})

समस्या नोड के कारण होती है, अधिक जानकारी के लिए कृपया इस post को देखें

नोड-एकीकरण को गलत पर सेट करने से रेंडरर प्रक्रिया में नोड.जेएस अक्षम हो जाएगा - अर्थात आपका ऐप केवल वही कर सकता है जो एक वेब ब्राउज़र करेगा।


tl; डॉ

एक सामान्य नोडज एप्लिकेशन के विपरीत, जहां आपके पास वैश्विक मॉड्यूल (जैसे /usr/bin/node में स्थित) तक पहुंच है, इलेक्ट्रॉन स्वचालित रूप से NODE_PATH पर्यावरण चर सेट नहीं करता है। आपको इसे अपने इच्छित मॉड्यूल वाले सभी पथों पर मैन्युअल रूप से सेट करना होगा।

अद्यतन करें:

सवाल का जवाब

क्यों require("ipc") काम कर रहा है और require("jquery") नहीं?

इस issue में पाया जाना चाहिए, यह कहते हुए कि सिस्टम / उपयोगकर्ता मॉड्यूल को मॉड्यूल के वैश्विक पथ में शामिल नहीं किया जाना चाहिए

चूँकि वे मॉड्यूल को एप्लिकेशन के साथ शिप नहीं कर सकते हैं और संभवतः गलत v8 हेडर के साथ संकलित कर सकते हैं।

और यदि आप इलेक्ट्रॉन के स्रोत पर एक नज़र डालते हैं, तो आप देख सकते हैं कि मॉड्यूल में आंतरिक मॉड्यूल जोड़े जाते हैं। module.globalPaths :

# Add common/api/lib to module search paths.
globalPaths.push path.resolve(__dirname, '..', 'api', 'lib')

यही कारण है कि आपके पास ipc , app आदि की पहुंच है, लेकिन ऐसे मॉड्यूल नहीं हैं जिन्हें आपने npm install -g का उपयोग करके विश्व स्तर पर स्थापित किया है।

मैंने अभी हाल ही में उसी HTML फ़ाइल की सेवा देने वाले एक स्थानीय सर्वर के साथ नवीनतम electron-prebuilt संस्करण के साथ इसे आज़माया था और मुझे लगता है कि मुझे पता है कि समस्या क्या है: यदि आप अपने ऐप के तहत अपने ऐप node_modules निर्देशिका का पथ नहीं node_modules एप्लिकेशन रूट को NODE_PATH वैरिएबल पर काम नहीं करने वाला है। तो आपको ऐसा कुछ करने की आवश्यकता है:

export NODE_PATH=/PATH/TO/APP/node_modules
electron /PATH/TO/APP

NODE_PATH निर्यात करते NODE_PATH सुनिश्चित करें कि आप एक पूर्ण मार्ग प्रदान करते हैं।

अपडेट 2:

टिप्पणी का जवाब:

मुझे jQuery नहीं मिला त्रुटियों

इस टिकट में पाया जाना है। मूल रूप से यदि आप jQuery के npm पैकेज का उपयोग करते हैं या इलेक्ट्रॉन के अंदर अपनी HTML फ़ाइलों में निम्न की तरह कुछ करते हैं:

<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>

आपको जो मिल रहा है वह एक कारखाना है न कि वैश्विक संदर्भ से जुड़ी वास्तविक jQuery वस्तु (जैसे window )। जैसा कि मैंने पिछले उत्तर में बताया था (इसमें jQuery का सोर्स कोड भी शामिल है)

जब आपको module.exports या इसी तरह के वातावरण के अंदर jQuery की आवश्यकता होती है जो module और module module.exports प्रदान करता है, जो आपको मिलता है वह एक कारखाना है न कि वास्तविक jQuery वस्तु।

अब उस कारखाने का उपयोग करने के लिए (या तो सीडीएन से कोड आयात करके या यदि आपके पास स्थानीय रूप से एनपीएम मॉड्यूल उपलब्ध है) तो आपको निम्नलिखित के रूप में कुछ की आवश्यकता होगी:

<script>
  window.jQuery = window.$ = require('jquery');
</script>

मैंने एक article लिखा है जो नोड + jQuery के संयोजन की व्याख्या करता है।





electron