如何在 google 闭包库中要求外部库?

How to require external libraries in google closure library?

我有一个使用外部库的 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');
};

socket.io.js 与 google 闭包编译器不兼容,所以除非你调整 socket.io.js 以使用 google 闭包,否则你不能这样做,有些人这样做了例如 jquery 但它显然不是一个可行的解决方案,你必须为每个新版本 blablala...噩梦
你最好的选择是使用 --externs 告诉闭包编译器这是一个外部库,因此来自这个库的所有代码都不会被重命名并且在编译后将保持 "valid"

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

尝试为 socket.io

添加 externs
: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