কীভাবে একটি জিকুয়েরি প্লাগইন প্রয়োজনীয় জেএসগুলির সাথে লোডযোগ্য করতে হয়


88

আমি প্রয়োজনীয়js + jquery নিয়ে কাজ করছি এবং আমি ভাবছিলাম যে কোনও প্রয়োজনে jQuery প্লাগইনকে ভালভাবে কাজ করার কোনও স্মার্ট উপায় আছে কিনা।

উদাহরণস্বরূপ আমি jQuery- কুকি ব্যবহার করছি। আমি যদি সঠিকভাবে বুঝতে পারি তবে আমি jquery-ڪوڪيie.js নামে একটি ফাইল তৈরি করতে পারি এবং অভ্যন্তরীণ কর

define(["jquery"], // Require jquery
       function($){
// Put here the plugin code. 
// No need to return anything as we are augmenting the jQuery object
});
requirejs.config( {
    "shim": {
        "jquery-cookie"  : ["jquery"]
    }
} );

আমি ভাবছিলাম যে আমি jQuery এর মতো কাজগুলি করতে পারি, যা এই জাতীয়:

if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
    define( "jquery", [], function () { return jQuery; } );
}

অথবা যদি jQuery প্লাগইনগুলি প্রয়োজনীয় জেএস বা কোনও amd এর সাথে সামঞ্জস্য করার একমাত্র উপায় হয়

উত্তর:


67

আপনার কেবল EITHER করা দরকার

define(["jquery"], // Require jquery
       function($){
// Put here the plugin code. 
// No need to return anything as we are augmenting the jQuery object
});

jquery-ڪوڪي.js এর শেষে, বা

requirejs.config( {
    "shim": {
        "jquery-cookie"  : ["jquery"]
    }
} );

আপনি jquery- কুকি অন্তর্ভুক্ত করার আগে যে কোনও জায়গায় (যেমন উদাহরণস্বরূপ যেখানে ডেটা-মুখ্য পয়েন্ট রয়েছে)।

আপনার পোস্ট করা শেষ কোড ব্লকটি jQuery এর মতো জিনিসগুলির পক্ষে ভাল যা পুনরায় বিতরণ হয় এবং এটি কোনও এএমডি পরিবেশে থাকতে পারে বা নাও হতে পারে। আদর্শভাবে প্রতিটি jQuery প্লাগইনে সেটিকে ইতিমধ্যে সেট আপ করা উচিত।

আমি অন্তর্ভুক্ত লাইব্রেরিগুলিকে যতটা সম্ভব অপ্রত্যাশিত রাখতে পছন্দ করি, তাই প্রতি পৃষ্ঠায় একবার বিশ্বব্যাপী শিম কনফিগারেশন আমার কাছে সবচেয়ে পরিষ্কার সমাধান বলে মনে হয় । এইভাবে আপগ্রেডগুলি নিরাপদ এবং সিডিএন সম্ভাবনা হয়ে ওঠে।


4
আমি যদি সংজ্ঞায়িত এবং শিম উভয় কাজ না করি তবে আমি একটি $। কুকি কোনও ফাংশন ত্রুটির বার্তা নয়
নিকোলা পেলুচেটি

আমার অভিজ্ঞতা অনুসারে, সংজ্ঞায়িত ফাংশন থেকে কোনও কিছু না ফিরিয়ে দেওয়া যথেষ্ট নয়, প্রয়োজনীয় জেলগুলি মডিউলটি লোড হয়েছে তা চিনতে পারবে না। শিম: around প্লাগইনগুলি: {নির্ভর করে: ['জ্যাকোয়ারি'], রফতানি: 'প্লাগইনগুলি'}
হনজাজে

আপনার নোট করা উচিত যে jQuery প্লাগইন স্ক্রিপ্টটি আসলে চালানো দরকার। আমি কোনও বিশেষজ্ঞ নই তবে আমি একটি সরল সমাধান পেয়েছি যার মাধ্যমে আপনার একটি একক আছে require(['plugin1', 'plugin2']);No কোনও কলব্যাক পাস হয় না তাই প্লাগইন স্ক্রিপ্টগুলি ছাড়া আর কিছুই চলবে না। এর অর্থ হ'ল তারপরে তারা jQuery.fnঅন্য যে কোনও জায়গায় নিজেকে যুক্ত করবে আপনি কেবল 'জকিউয়ারি' কে নির্ভরতা হিসাবে তালিকাভুক্ত করতে পারেন এবং সেগুলি অন্তর্ভুক্ত করা হবে। যেমনটি আমি বলেছিলাম, আমি এটিতে বেশ নতুন এবং আরও ভাল পদ্ধতির হতে পারে (যেমন কেবল কোনও scriptট্যাগ ব্যবহার করা ) তবে এটি কার্যকর হয়।
জোশুয়া বামব্রিক

4
জোশ: আপনি জুয়া খেলছেন যে সবকিছু সঠিক ক্রমে লোড হতে চলেছে। আপনার সাইটের কিছু ব্যবহারকারী সম্ভবত ভাঙা জিনিস দেখতে পাচ্ছেন। সমস্যা যতটা নয় যে প্লাগইন লোড এটা যখন প্লাগইন লোড এবং অন্য কোন সময়ে নির্বাহ করা হয়। প্রয়োজনীয় ব্যবহারের মূল কারণটি অনুমানের চেয়ে নির্ভরতার উপর নির্ভরশীল ক্রিয়াকলাপের একটি বুদ্ধিমান অর্ডার নিশ্চিত করা।
হ্যান্স

104

প্রয়োজনীয় জেএস-এ শিম কনফিগারেশন ব্যবহার করে কিছু সতর্কতা রয়েছে, http://requirejs.org/docs/api.html#config-shim এ নির্দেশিত । যথা আপনি যখন অপটিমাইজার ব্যবহার করছেন তখন "শিল কনফিগারেশনের সাথে সিডিএন লোডিং কোনও মিশ্রণ করবেন না"।

আমি প্রয়োজনীয় জেএস ও এর সাথে উভয় ক্ষেত্রে একই jQuery প্লাগইন কোডটি ব্যবহার করার একটি উপায় খুঁজছিলাম। Https://github.com/umdjs/umd/blob/master/jqueryPlugin.js এ jQuery প্লাগইনগুলির জন্য আমি এই স্নিপেটটি পেয়েছি । আপনি এই কোডটিতে আপনার প্লাগইনটি মুড়ে রাখেন এবং এটি যেভাবেই সঠিকভাবে কাজ করবে।

(function (factory) {
if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module depending on jQuery.
    define(['jquery'], factory);
} else {
    // No AMD. Register plugin with global jQuery object.
    factory(jQuery);
}
}(function ($) {

    $.fn.yourjQueryPlugin = function () {
        // Put your plugin code here
    };  

}));

ক্রেডিট jrburke যায়; অনেক জাভাস্ক্রিপ্টের মতো এটি অন্যান্য ফাংশনগুলিতে অভিনয় করে ফাংশনের ভিতরে ফাংশন করে। তবে আমি মনে করি এটি কী করছে তা আমি প্যাক করে ফেলেছি।

factoryপ্রথম লাইনে ফাংশন আর্গুমেন্ট নিজেই একটি ফাংশন যা $আর্গুমেন্টে প্লাগইন সংজ্ঞায়িত করার জন্য অনুরোধ করা হয় । যখন কোনও এএমডি-সামঞ্জস্যপূর্ণ লোডার উপস্থিত না থাকে, তখন এটি সরাসরি বৈশ্বিক jQueryঅবজেক্টে প্লাগইন সংজ্ঞায়িত করার জন্য অনুরোধ করা হয় । এটি সাধারণ প্লাগইন সংজ্ঞা আইডিয়ামের মতো:

function($)
{
  $.fn.yourjQueryPlugin = function() {
    // Plugin code here
  };
}(jQuery);

যদি কোনও মডিউল লোডার থাকে, তবে factoryjQuery লোড করার পরে লোডারকে কল করার জন্য কলব্যাক হিসাবে নিবন্ধিত হয়। JQuery এর বোঝা অনুলিপিটি আর্গুমেন্ট। এটি সমান

define(['jquery'], function($) {
  $.fn.yourjQueryPlugin = function() {
     // Plugin code here
  };
})

4
আমি এই উত্তরটি পছন্দ করি কারণ যদিও প্রশ্নটি একটি jQuery প্লাগইন সম্পর্কে ছিল, এটি কেবল jQuery নয়, কোনও মডিউল বা লাইব্রেরির জন্য কাজ করে। আপনার কোডটি আমার মাথাটি মুড়িয়ে দিতে আমার এক মিনিট সময় নিয়েছিল, তবে একবার আমি এটি করে ফেললে এটি পুরোপুরি বুঝে যায়।
অ্যাডাম টটল

4
এটি অবশ্যই দুর্ভেদ্য জাভাস্ক্রিপ্ট। এটি কীভাবে কাজ করে সে সম্পর্কে আমি কিছু ব্যাখ্যা যুক্ত করেছি।
কার্ল রেমন্ড

এটি কীভাবে করবেন এবং jQuery বা Zepto এর সাথে কাজ করে এমন প্লাগইন তৈরি করবেন সে সম্পর্কে কোনও টিপস ? আপনি সহজেই নন-এএমডি কোডটি প্রতিস্থাপন করতে পারেন factory(jQuery || Zepto);তবে আপনি কীভাবে এএমডি অংশটি করবেন তা আমি জানি না। আমার মনে হয় আপনাকে জেপ্টোতে jQuery "পাথ" সেট করতে হবে ?? paths: { jquery: 'vendor/zepto/zepto.min' }
রায়ান হুইল

বাহ আমি দীর্ঘদিন ধরে কোডের এই স্নিপেটটি বুঝতে চাইছিলাম। অনেক অনেক ধন্যবাদ, shimমূলত তা করা হয় না ? আমি অনুমান করি না .. কারণ আপনি বলেছিলেন আপনি উপরের মতো ম্যানুয়ালি কোডিং করছেন।
ইউজিন

আমার মতো মূর্খদের জন্য প্রতিবাদ করুন: যেখানে এটি $.fn.jqueryPluginস্নিপেটে বলেছে , jqueryPluginপ্লাগইন নাম পরিবর্তন করুন !!
ম্যাট লেইস

2

ঠিক তেমন কিছু জেকুরি প্লাগইনগুলির জন্য একটি এফওয়াইআই ইতিমধ্যে এমডি / প্রয়োজন ব্যবহার করে যাতে আপনাকে শিমের মধ্যে কিছু ঘোষণা করার দরকার নেই। আসলে এটি করা আপনার ক্ষেত্রে কিছু ক্ষেত্রে সমস্যা তৈরি করতে পারে।

আপনি যদি জেকারি কুকি জেএসে সন্ধান করেন তবে আপনি কলগুলি সংজ্ঞায়িত করতে এবং প্রয়োজনীয় প্রয়োজনগুলি দেখতে পাবেন (["jquery"])।

এবং jquery.js এ আপনি একটি সংজ্ঞা দেখতে পাবেন ("jquery", [], ফাংশন () ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.