2017-06-01 6 views
12

मैं एक वेबपैक प्लगइन बनाने की कोशिश कर रहा हूं, जो किसी निश्चित फ़ंक्शन के लिए कोड को पार्स करेगा और इसे किसी अन्य फ़ंक्शन के साथ प्रतिस्थापित करेगा, यह प्लगइन वैश्विक रूप से नए फ़ंक्शन का खुलासा करेगा।वेबपैक प्लगइन को किसी अन्य फ़ंक्शन को प्रतिस्थापित करने के लिए

class someName { 
    constructor(local, domain, translationFile, options) { 
    } 

    apply(compiler) { 

    // exposing ngt function as a global 
    compiler.plugin('make', function(compilation, callback) { 
     var childCompiler = compilation.createChildCompiler('someNameExpose'); 
     childCompiler.apply(new webpack.DefinePlugin({ 
     ngt: function(singular , plural, quantity) { 
      return quantity == 1 ? singular : plural; 
     } 
     })); 
     childCompiler.runAsChild(callback); 
    }); 

    // searching for the getValue function 
    compiler.parser.plugin(`call getValue`, function someNameHandler(expr) { 

     // create a function to replace getValue with 
     let results = 'ngt('+ expr.arguments +')'; 
     const dep = new ConstDependency(results, expr.range); 
     dep.loc = expr.loc; 
     this.state.current.addDependency(dep); 
     return true; 
    }); 
    } 
} 

module.exports = someName; 

अद्यतन/अलग तरीके से व्यक्त

मैं एक मुद्दा यहाँ है, जब compiler.parser.plugin('call getValue', function someNameHandler(expr) {...} ब्लॉक टिप्पणी की है ngt समारोह एक वैश्विक रूप में मौजूद हैं।

जब इसकी टिप्पणी नहीं की गई, मुझे एक त्रुटि मिलती है, एनजीटी अनिर्धारित है।

टिप्पणी की मेरा मतलब /**/

मुझे लगता है कि के लिए एक समाधान है, लेकिन इसके लिए अब तक तो विचार मिल गया। अभी मैं क्या करता हूं मैं एक अज्ञात फ़ंक्शन निर्यात करता हूं जो मैं चाहता हूं। Github

+0

हाय कुछ कर सकते हैं, यह निम्नलिखित बातों को स्पष्ट करना संभव है? 'Reactjs' टैग प्रासंगिक कैसे है? क्या यह वेबपैक 1 या 2 है? (एक विशेषज्ञ के लिए स्पष्ट हो सकता है, लेकिन बेहतर इसे स्पष्ट करें) क्या आप अधिक विवरण के साथ पिछले 2 वाक्यों को दोहरा सकते हैं? (क्षमा करें, मुझे हो सकता है, लेकिन मुझे यह समझने में परेशानी है कि समस्या क्या है) –

+0

@ ह्यूग्स मोरौ के पास प्रतिक्रियाओं का सीधा संबंध नहीं है लेकिन इसका उपयोग रिस्पॉज, वेबपैक 1 के लिए किया जाता है। और मैंने अधिक जानकारी के साथ प्रश्न अपडेट किया है। –

+1

क्यों इसके लिए एक लेबल प्लगइन लिखना/उपयोग नहीं करते? यह एक बहुत आसान और बेबेल एक पारदर्शी के बाद है। – Bamieh

उत्तर

-1

आप विधि वातावरण के आधार पर ओवरराइड कर सकते हैं:

आप प्लगइन यहाँ देख सकते हैं। के माना कि आप विधि

function a(){ 
    //original defination 
} 

अब वातावरण के आधार पर है, अगर यह एक उत्पादन है आप की तरह इस

if (environment.production) { 
    function a(){ 
    //overridden defination 
    } 
} 
संबंधित मुद्दे

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