Как требовать внешние библиотеки в библиотеке Google Closure?

У меня есть компонент закрытия Google, который использует внешнюю библиотеку (socket.io.js). Можно ли требовать внешние библиотеки, используя что-то вроде goog.require и goog.addDependency Например, что-то вроде этого:

deps.js:

goog.addDependency('path/to/MyComponent.js', ['MyComponent'], ['goog.events', 'https://cdn.socket.io/socket.io-1.3.5.js']);

MyComponent.js:

goog.provide('MyComponent');
goog.require('goog.events');
// I want something like goog.require('https://cdn.socket.io/socket.io-1.3.5.js');
MyComponent = function() {
    var socket = io('http://localhost');
};

2 ответа

Решение

Попробуйте добавить externs для socket.io

:externs ["externs/socket.io-externs.js"]

Больше информации:

http://swannodette.github.io/2014/03/14/externs-got-you-down/ http://lukevanderhart.com/2011/09/30/using-javascript-and-clojurescript.html https://blog.8thlight.com/taryn-sauer/2014/07/31/clojurescript-faux-pas.html

socket.io.js несовместим с компилятором Google Closure, поэтому вы не сможете сделать это, если не настроите socket.io.js для работы с Google Closure, например, некоторые люди сделали это для jquery, но это явно не жизнеспособное решение, и вы приходится делать это для каждой новой версии блаблала... кошмар
Лучше всего использовать --externs, который сообщает закрывающему компилятору, что это внешняя библиотека, и поэтому весь код, полученный из этой библиотеки, не будет переименован и останется "действительным" после компиляции.

https://developers.google.com/closure/compiler/docs/api-tutorial3

Другие вопросы по тегам