Ответы пользователя по тегу AMD
  • Дает ли webpack возможность подключить нужный модуль в инлайновом js, как это делает requirejs?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Один из разработчиков webpack рекомендует использовать ded/script.js :
    var $script = require("scriptjs");
    $script("//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js", function() {
      $('body').html('It works!')
    });
    Ответ написан
  • Как подключить Яндекс.Метрику в RequireJS?

    Только что тоже этим озадачился. Попробовал так, похоже, работает:

    1. в теле HTML остаётся только
    <noscript><div><img src="//mc.yandex.ru/watch/XXXXXX?ut=noindex" style="position:absolute; left:-9999px;" alt="" /></div></noscript>


    2. в конфиге require в paths дописываем путь для скрипта метрики (название "yametrika" я преложил, вы можете назвать сей "модуль" как угодно): "yametrika": "//mc.yandex.ru/metrika/watch"

    3. в первом загружаемом модуле нужно указать этот "yametrika" в зависимостях, но не обязательно назначать ему ответную переменную:
    define([ 'backbone','jquery', ... ,"yametrika"], function(...){}


    4. в функции, которая там вызывается вставить инициализацию объекта Метрики:
    try {
    	window.yaCounterXXXXXX = new Ya.Metrika(
    		{
    			id:XXXXXX
    			, trackHash:true
    			, ut:"noindex"
    		}
    	);
    } catch(e) { }


    Всё, дальше можно, например, обозначать достижения целей:
    yaCounterXXXXXX.reachGoal("ME_IS_RICH_NOW");

    Upd. у некоторых посетителей включены блокировщики скриптов, отрубающие загрузку Яндекс.Метрики. Не поленитесь предусмотреть случай ошибки загрузки этого скрипта.

    Например, заменой его, в случае неудачи «пустышкой», подгружаемой с вашего сервера, указав её в paths:
    "yametrika": [ "//mc.yandex.ru/metrika/watch", "lib/yamertika_dummy"]

    где описаны методы метрики:
    ...
    return {
    	addFileExtension:function(){}
    	, clickmap: function(){}
    	, enableAll: function(){}
    	, extLink: function(){}
    	, file:  function(){}
    	, hit:  function(){}
    	, replacePhones:function(){}
    	, notBounce: function(){}
    	, reachGoal: function(){}
    	, trackLinks: function(){}
    	, params: function(){}
    };


    или просто обработав ошибку в конфиге require:

    requirejs.onError = function(err){ 
        if( err.requireModules.length == 1  &&  err.requireModules[0] == "yametrika") { ... } else throw err;
    }
    Ответ написан