Как goog.require JQuery из CDN?

В настоящее время я экспериментирую с различными форматами модулей JavaScript и загрузчиком, а также хотел попробовать Закрытие Google.

У меня есть базовый пример. работает, но не могу понять, как использовать goog.require для внешней библиотеки. Возьмем, к примеру, JQuery из CDN.

Сейчас делаю следующее. На HTML-странице:

<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>

И в сценарии:

goog.require("Greets");
goog.provide("Greets.MsgDivMessenger");

Greets.MsgDivMessenger = function() {};
Greets.MsgDivMessenger.prototype.sendMessage = function(message)
{
    $('#msg').text(message);
};

Это работает, поскольку глобальный $ включается через тег <script .../> в саму HTML-страницу.

Но я хотел бы загрузить JQuery через goog.require, без тега <script .../> на HTML-странице:

goog.require("Greets");
goog.require("$");
goog.provide("Greets.MsgDivMessenger");

Greets.MsgDivMessenger = function() {};
Greets.MsgDivMessenger.prototype.sendMessage = function(message)
{
    $('#msg').text(message);
};

Я попытался добавить URL-адрес JQuery CDN в качестве зависимости:

goog.addDependency('https://code.jquery.com/jquery-2.1.3.min.js', ['$'], []);

Но это не сработало, вместо этого goog.require попытался загрузить .../closure/goog/https://code.jquery.com/jquery-2.1.3.min.js.

Да, я знаю, что JQuery для $('msg') мне не нужен, но смысл в том, чтобы управлять модулями (в том числе и внешними) с помощью Google Closure.

Как мне goog.require JQuery из CDN?


person lexicore    schedule 15.02.2015    source источник


Ответы (1)


Это не предназначено для использования, и для него нет поддержки. goog.provide/require — это схема управления зависимостями. Файл, который объявляет «goog.provide», может потребоваться, объявив его с помощью goog.require. Для производственного использования зависимости будут предварительно загружены или объединены.

Если вы не хотите взломать Closure, ваш единственный вариант — разместить его на своих источниках.

person John    schedule 16.02.2015
comment
Спасибо, я так и подозревал. Но не могу понять причину, по которой это не должно работать и для внешних библиотек - пока я определяю, что предоставляется в deps.js. - person lexicore; 17.02.2015
comment
@lexicore, потому что в jQuery нет инструкции goog.provide. - person Chad Killingsworth; 17.02.2015
comment
@ChadKillingsworth Если я сохраню JQuery локально и добавлю ручной оператор в deps.js, это будет работать даже без goog.provide в самом JQuery. Так что отсутствие goog.provide не является причиной нокаута, судя по моей точке зрения. - person lexicore; 17.02.2015
comment
Потому что, как сказал @John, система предназначена для локальных файлов, а не для удаленных. См. github.com/google/closure-library. /blob/мастер/закрытие/гуг/ - person Chad Killingsworth; 17.02.2015
comment
Извините, я не ясно выразился по этому поводу. goog.require в первую очередь предназначен для зависимостей времени сборки. Нет ничего необычного в том, что во время выполнения есть зависимости, которые не являются goog.require'd. - person John; 19.02.2015