আমি এখনও আমাদের উত্স কোডে এই সমস্যাটি সৃষ্টি করে এমন জায়গাটি কীভাবে খুঁজে পেলাম তা জানতে আমি এখনও আগ্রহী, তবে আমি তখন থেকেই সমস্যাটি ম্যানুয়ালি খুঁজে পেতে সক্ষম হয়েছি।
.controller()
অ্যাপ্লিকেশন মডিউলে কোনও কল ব্যবহার না করে বৈশ্বিক স্কোপে একটি কন্ট্রোলার ফাংশন ঘোষণা করা হয়েছিল ।
সুতরাং এরকম কিছু ছিল:
function SomeController( $scope, i18n ) { }
এটি AngularJS এর জন্য ঠিক কাজ করে তবে এটিকে ম্যাংলিংয়ের সাথে সঠিকভাবে কাজ করতে আমাকে এটিকে পরিবর্তন করতে হয়েছিল:
var applicationModule = angular.module( "example" );
function SomeController( $scope, i18n ) { }
applicationModule.controller( "SomeController", [ "$scope", "i18n", SomeController ] );
আরও পরীক্ষার পরে, আমি প্রকৃতপক্ষে আরও নিয়ন্ত্রণকারীদের উদাহরণ পেয়েছি যা সমস্যার কারণও ছিল। আমি নিজেই সেগুলির সকলের উত্স খুঁজে পেয়েছি :
প্রথমত, আমি uglif বিকল্পগুলিতে আউটপুট বিউটিফিকেশন সক্ষম করা বরং এটি গুরুত্বপূর্ণ মনে করি। আমাদের ভয়াবহ কাজের জন্য যার অর্থ:
options : {
beautify : true,
mangle : true
}
এর পরে আমি ক্রোমে প্রোজেক্ট ওয়েবসাইটটি খুললাম, সাথে দেবটুলগুলি খোলা ছিল। নীচের মত একটি ত্রুটি ফলে যা লগ করা হচ্ছে:
আমাদের আগ্রহী কল কলটির পদ্ধতিটি হ'ল আমি একটি তীর দ্বারা চিহ্নিত করেছি। এই providerInjector
ভিতরেinjector.js
। আপনি একটি ব্রেকপয়েন্ট স্থাপন করতে চান যেখানে এটি একটি ব্যতিক্রম ছুঁড়েছে:
আপনি যখন এখন অ্যাপ্লিকেশনটি আবার চালাবেন, ব্রেকপয়েন্টটি হিট হবে এবং আপনি কল স্ট্যাকটি লাফিয়ে উঠতে পারবেন। "ভুল ইনজেকশন টোকেন" স্ট্রিং থেকে সনাক্তযোগ্য, invoke
ভিতরেinjector.js
থেকে একটি কল আসবে :
locals
প্যারামিটার (থেকে mangled d
আমার কোড মধ্যে) একটি প্রশংসনীয় ভাল ধারণা আপনার সোর্স যা বস্তুর সম্পর্কে সমস্যা দেয়:
grep
আমাদের উত্সের তাত্ক্ষণিকতার অনেক উদাহরণ খুঁজে পাওয়া যায় modalInstance
, তবে সেখান থেকে গিয়ে উত্সটিতে এই স্পটটি পাওয়া সহজ ছিল:
var ModalCreateEditMeetingController = function( $scope, $modalInstance ) {
};
যা অবশ্যই এতে পরিবর্তন করতে হবে:
var ModalCreateEditMeetingController = [ "$scope", "$modalInstance", function( $scope, $modalInstance ) {
} ];
যদি ভেরিয়েবল দরকারী তথ্য না ধরে, আপনি স্ট্যাকটি আরও উপরে লাফিয়ে যেতে পারেন এবং আপনার একটি কল আঘাত করতে হবে invoke
যাতে অতিরিক্ত ইঙ্গিত থাকতে হবে:
এটি আবার হতে আটকাবেন
এখন যেহেতু আপনি আশাবাদী সমস্যাটি পেয়ে গেছেন, আমি মনে করি ভবিষ্যতে আবার কীভাবে এড়াতে হবে তা থেকে কীভাবে সর্বোত্তমভাবে এড়ানো যায় সে সম্পর্কে আমার উল্লেখ করা উচিত।
স্পষ্টতই, আপনি কেবল ইনলাইন অ্যারে টীকাটি যে কোনও জায়গায় ব্যবহার করতে পারেন , বা (আপনার পছন্দের উপর নির্ভর করে) $inject
সম্পত্তি টীকা এবং ভবিষ্যতে এটি ভুলে যাওয়ার চেষ্টা করবেন না। যদি আপনি এটি করেন, তবে তাড়াতাড়ি এর মতো ত্রুটিগুলি ধরার জন্য, কঠোর নির্ভরতা ইনজেকশন মোড সক্ষম করার বিষয়টি নিশ্চিত করুন ।
সতর্ক থেকো! আপনি যদি কৌণিক বাটারং ব্যবহার করছেন তবে স্ট্রাইকডিডি আপনার পক্ষে কাজ করবে না, কারণ কৌণিক বাটারং আপনার মধ্যে অননোটবিহীন কোডটি ইনজেক্ট করে (খারাপ বাটারং!)।
অথবা আপনি এনজি-টিকাটি এটিকে যত্ন নিতে দিতে পারেন। আমি অত্যন্ত তা করার পরামর্শ দিচ্ছি, কারণ এটি এই ক্ষেত্রের ভুলগুলির অনেক সম্ভাবনা সরিয়ে দেয়, যেমন:
- ডিআই টীকা অনুপস্থিত
- ডিআই টীকা অসম্পূর্ণ
- ভুল ক্রমে ডিআই টীকা
টীকাগুলি আপ টু ডেট রাখার জন্য পাছায় কেবল ব্যথা হয় এবং এটি স্বয়ংক্রিয়ভাবে করা গেলে আপনার এটি করা উচিত নয়। এনজি-এনোটেট ঠিক তাই করে।
এটি আপনার বিল্ড প্রক্রিয়ায় গ্রান্ট-এনজি-এনেটেট এবং গল্প-এনজি-এনেটেটের সাথে সুন্দরভাবে সংহত করা উচিত ।