2015-11-24 4 views
7

मैं रिएक्ट और वेबपैक का उपयोग कर क्रोम एक्सटेंशन विकसित कर रहा हूं।वेबपैक और प्रोग्रामेटिक रूप से इंजेक्शन सामग्री स्क्रिप्ट

इस प्रोजेक्ट में, विभिन्न मॉड्यूल chrome.tabs.executeScript(null, {file: 'content-script-file.js'}) का उपयोग करके सामग्री स्क्रिप्ट को प्रोग्रामेटिक रूप से इंजेक्ट करेंगे।

यह समस्याग्रस्त हो जाता है क्योंकि मैं सबकुछ बंडल करने के लिए वेबपैक का उपयोग कर रहा हूं। असल में, पृष्ठभूमि स्क्रिप्ट कई मॉड्यूल लोड कर रही है, जो कुछ परिस्थितियों में प्रोग्राम स्क्रिप्ट को प्रोग्रामेटिक रूप से इंजेक्ट करने के लिए कॉन्फ़िगर की गई हैं।

हालांकि, मैं यह नहीं समझ सकता कि इन सामग्री स्क्रिप्ट को बंडल एप्लिकेशन में "पाया" कैसे मिलेगा। उन्हें कभी भी स्पष्ट रूप से आयात नहीं किया जाता है, बस executeScript कॉल में संदर्भित किया गया है।

उसी समय, सामग्री स्क्रिप्ट प्रतिक्रिया का उपयोग करते हैं, इसलिए उन्हें वेबपैक में babel-loader से गुज़रना पड़ता है।

कोई विचार?

+0

तो मूल रूप से आपको एक रैपर फ़ंक्शन बनाना होगा जो बेबेल स्क्रिप्ट (तर्कसंगत रूप से एक बहुत बड़ा) इंजेक्ट करता है, फिर वास्तविक सामग्री स्क्रिप्ट (और शायद कोड जो बेबेल को ट्रिगर करता है) ... क्या आपको ओवरहेड डर नहीं है बहुत बड़ा हो? – wOxxOm

+0

@wOxxOm: मैं ईमानदार होने के लिए उस तरह के ब्लोट से बचना चाहता हूं, लेकिन मैं वेबपैक के लिए नया हूं, इसलिए मुझे यकीन नहीं है कि यह रोकने के लिए मेरे लिए क्या कर सकता है। – damd

+0

कुशल दृष्टिकोण प्रीकंपील्ड स्क्रिप्ट को इंजेक्ट करना होगा। मुझे लगता है कि आपको स्क्रिप्ट की सूची को मैन्युअल रूप से प्रीकंपाइल करने के लिए परिभाषित करना होगा, लेकिन मैं वेबपैक पर कोई विशेषज्ञ नहीं हूं। – wOxxOm

उत्तर

1

आपका सामग्री स्क्रिप्ट को प्रभावी ढंग से "प्रवेश बिंदुओं" webpack-मामले में कर रहे हैं।

प्रत्येक शीर्ष-स्तरीय सामग्री स्क्रिप्ट को वेबपैक प्रविष्टि के रूप में परिभाषित किया जाना चाहिए। इन सामग्री स्क्रिप्ट बनाने के लिए वेबपैक का उपयोग करें। प्रत्येक प्रविष्टि एक बड़ी ब्लॉब में अपनी सभी निर्भरताओं (जैसे प्रतिक्रिया) में खींच जाएगी।

फिर आप अपना दूसरा एक्सटेंशन बनाते हैं जो आपके एक्सटेंशन को बनाता है। इस विस्तार के कच्चे लोडर और import अपने webpack संकलित सामग्री स्क्रिप्ट का उपयोग करेगा और फिर इसे उन सब को तार स्थानीय चर के रूप होगा:

import scriptA from 'content/build/a'; 
import scriptB from 'content/build/b'; 

और अब आप की जरूरत के रूप में अपने टैब में स्क्रिप्ट इंजेक्षन कर सकते हैं:

chrome.tabs.executeScript(null, scriptA); 
-1

यह काम करना चाहिए, क्रोम दस्तावेज़ कहते हैं कि निष्पादित स्क्रिप्ट स्ट्रिंग कोड या स्ट्रिंग फ़ाइल को छोड़ती है।

import ContentScript from './content-script-file'; 
 

 
chrome.tabs.executeScript(null, ContentScript);

+0

एक प्रश्न परिभाषा के अनुसार एक जवाब नहीं है, इसके लिए यह एक टिप्पणी होनी चाहिए, जवाब नहीं – RononDex

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

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