- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Google Closure Compiler 在高级优化模式下使用一个文件来定义 externs,这将防止引用外部库中符号的变量、属性和函数名称被缩小,从而破坏代码。我的目标是编译使用 MooTools 框架(版本 1.2 和 1.3)的代码,但我无法找到一个“官方”外部文件,当我的代码被提供给闭包编译器时,它可以防止对 MooTools 函数的引用被混淆。我提出了以下相当基本的自定义外部文件,它成功地处理了我的文件,但是否有更好的选择(例如从 MooTools 源自动生成它)?
//
// Number
//
/**
* @param {number} min
* @param {number} max
* @return {number}
* @nosideeffects
*/
Number.prototype.limit = function (min, max) {}
/**
* @param {number=} precision
* @return {number}
* @nosideeffects
*/
Number.prototype.round = function (precision) {}
Number.prototype.times = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.toFloat = function () {}
/**
* @param {number=} base
* @return {number}
* @nosideeffects
*/
Number.prototype.toInt = function (base) {}
//
// Number.Math
//
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.abs = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.acos = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.asin = function () {}
/**
* @param {number} x
* @return {number}
* @nosideeffects
*/
Number.prototype.atan2 = function (x) {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.ceil = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.cos = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.exp = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.floor = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.log = function () {}
/**
* @param {...number} x
* @return {number}
* @nosideeffects
*/
Number.prototype.max = function (x) {}
/**
* @param {...number} x
* @return {number}
* @nosideeffects
*/
Number.prototype.min = function (x) {}
/**
* @param {number} x
* @return {number}
* @nosideeffects
*/
Number.prototype.pow = function (x) {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.sin = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.sqrt = function () {}
/**
* @return {number}
* @nosideeffects
*/
Number.prototype.tan = function () {}
//
// String
//
/**
* @return {boolean}
* @nosideeffects
*/
String.prototype.test = function () {}
/**
* @return {boolean}
* @nosideeffects
*/
String.prototype.contains = function () {}
/**
* @return {string}
* @nosideeffects
* @suppress {duplicate}
*/
String.prototype.trim = function () {}
/**
* @return {string}
* @nosideeffects
*/
String.prototype.clean = function () {}
/**
* @return {string}
* @nosideeffects
*/
String.prototype.camelCase = function () {}
/**
* @return {string}
* @nosideeffects
*/
String.prototype.hyphenate = function () {}
/**
* @return {string}
* @nosideeffects
*/
String.prototype.capitalize = function () {}
/**
* @return {string}
* @nosideeffects
*/
String.prototype.escapeRegExp = function () {}
/**
* @return {number}
* @nosideeffects
*/
String.prototype.toInt = function () {}
/**
* @return {number}
* @nosideeffects
*/
String.prototype.toFloat = function () {}
/**
* @return {(string|Array.<number>)}
* @nosideeffects
*/
String.prototype.hexToRgb = function () {}
/**
* @return {(string|Array.<string>)}
* @nosideeffects
*/
String.prototype.rgbToHex = function () {}
/**
* @return {string}
* @nosideeffects
*/
String.prototype.substitute = function () {}
/**
* @return {string}
* @nosideeffects
*/
String.prototype.stripScripts = function () {}
//
// Array
//
/**
* @param {function(*, number=, Array=) : undefined} fn
* @param {!Object=} bind
*/
Array.prototype.each = function (fn, bind) {}
Array.prototype.invoke = function () {}
/**
* @param {function(*, number=, Array=) : boolean} fn
* @param {!Object=} bind
* @return {boolean}
* @suppress {duplicate}
*/
Array.prototype.every = function (fn, bind) {}
/**
* @param {function(*, number=, Array=) : boolean} fn
* @param {!Object=} bind
* @return {Array}
* @suppress {duplicate}
*/
Array.prototype.filter = function (fn, bind) {}
/**
* @return Array
*/
Array.prototype.clean = function () {}
/**
* @param {*} item
* @param {number} from
* @return number
* @suppress {duplicate}
*/
Array.prototype.indexOf = function (item, from) {}
/**
* @param {function(*, number=, Array=) : *} fn
* @param {!Object=} bind
* @return {Array}
* @suppress {duplicate}
*/
Array.prototype.map = function (fn, bind) {}
/**
* @param {function(*, number=, Array=) : boolean} fn
* @param {!Object=} bind
* @return {boolean}
* @suppress {duplicate}
*/
Array.prototype.some = function (fn, bind) {}
/**
* @param {Array} obj
* @return {Object}
*/
Array.prototype.associate = function (obj) {}
/**
* @param {Object} obj
* @return {Object}
*/
Array.prototype.link = function (obj) {}
/**
* @param {*} item
* @param {number} from
* @return {boolean}
*/
Array.prototype.contains = function (item, from) {}
/**
* @param {Array} other
* @return {Array}
*/
Array.prototype.append = function (other) {}
/**
* @return {*}
*/
Array.prototype.getLast = function () {}
/**
* @return {*}
*/
Array.prototype.getRandom = function () {}
/**
* @param {*} item
* @return {Array}
*/
Array.prototype.include = function (item) {}
/**
* @param {Array} other
* @return {Array}
*/
Array.prototype.combine = function (other) {}
/**
* @param {*} item
* @return {Array}
*/
Array.prototype.erase = function (item) {}
/**
* @return {Array}
*/
Array.prototype.empty = function () {}
/**
* @return {Array}
*/
Array.prototype.flatten = function () {}
/**
* @return {*}
*/
Array.prototype.pick = function () {}
Array.prototype.hexToRgb = function () {}
Array.prototype.rgbToHex = function () {}
// Class
/**
* @constructor
* @param {(!Object|function())} properties
*/
function Class(properties) { }
/**
* @param {!Object} properties
*/
Class.prototype.implement = function (properties) {}
/**
* @constructor
*/
function Events() { }
/**
* @constructor
*/
function Options() { }
//
// Element
//
/**
* @constructor
* @param {(string|Element)} el
* @param {!Object=} properties
* @suppress {duplicate}
*/
function Element(el, properties) { }
/**
* @param {string} tag
* @return {Element}
*/
Element.prototype.getElement = function (tag) {}
/**
* @param {string} tag
* @return {Elements}
*/
Element.prototype.getElements = function (tag) {}
/**
* @param {string} id
* @return {Element}
*/
Element.prototype.getElementById = function (id) {}
/**
* @param {(string|!Object)} property
* @param {*=} value
* @return {Element}
*/
Element.prototype.set = function (property, value) {}
/**
* @param {string} property
* @return {*}
*/
Element.prototype.get = function (property) {}
/**
* @param {string} property
* @return {*}
*/
Element.prototype.erase = function (property) {}
/**
* @param {(string|Element)} match
* @return {boolean}
*/
Element.prototype.match = function (match) {}
/**
* @param {(string|Element)} el
* @return {boolean}
* @suppress {duplicate}
*/
Element.prototype.contains = function (el) {}
/**
* @param {(string|Element)} el
* @param {string=} where
* @return {Element}
*/
Element.prototype.inject = function (el, where) {}
/**
* @param {(string|Element)} el
* @param {string=} where
* @return {Element}
*/
Element.prototype.grab = function (el, where) {}
/**
* @param {(string|Element|Elements)} el
* @param {...(string|Element|Elements)} var_args
* @return {Element}
*/
Element.prototype.adopt = function (el,var_args) {}
/**
* @param {(string|Element)} el
* @param {string=} where
* @return {Element}
*/
Element.prototype.wraps = function (el, where) {}
/**
* @param {string} text
* @param {string=} where
* @return {Element}
*/
Element.prototype.appendText = function (text, where) {}
/**
* @return {undefined}
*/
Element.prototype.dispose = function () {}
/**
* @param {boolean=} contents
* @param {boolean=} keepid
* @return {Element}
*/
Element.prototype.clone = function (contents, keepid) {}
/**
* @param {(string|Element)} el
* @return {Element}
*/
Element.prototype.replaces = function (el) {}
/**
* @param {string} className
* @return {boolean}
*/
Element.prototype.hasClass = function (className) {}
/**
* @param {string} className
* @return {Element}
*/
Element.prototype.addClass = function (className) {}
/**
* @param {string} className
* @return {Element}
*/
Element.prototype.removeClass = function (className) {}
/**
* @param {string} className
* @param {boolean=} force
* @return {Element}
*/
Element.prototype.toggleClass = function (className, force) {}
/**
* @param {string=} match
* @return {Element}
*/
Element.prototype.getPrevious = function (match) {}
/**
* @param {string=} match
* @return {Elements}
*/
Element.prototype.getAllPrevious = function (match) {}
/**
* @param {string=} match
* @return {Element}
*/
Element.prototype.getNext = function (match) {}
/**
* @param {string=} match
* @return {Elements}
*/
Element.prototype.getAllNext = function (match) {}
/**
* @param {string=} match
* @return {Element}
*/
Element.prototype.getFirst = function (match) {}
/**
* @param {string=} match
* @return {Element}
*/
Element.prototype.getLast = function (match) {}
/**
* @param {string=} match
* @return {Element}
*/
Element.prototype.getParent = function (match) {}
/**
* @param {string=} match
* @return {Elements}
*/
Element.prototype.getParents = function (match) {}
/**
* @param {string=} match
* @return {Elements}
*/
Element.prototype.getSiblings = function (match) {}
/**
* @param {string=} match
* @return {Elements}
*/
Element.prototype.getChildren = function (match) {}
/**
* @return {Element}
*/
Element.prototype.empty = function () {}
Element.prototype.destroy = function () {}
/**
* @return {string}
*/
Element.prototype.toQueryString = function () {}
Element.prototype.getSelected = function () {}
/**
* @param {string} property
* @return {string}
*/
Element.prototype.getProperty = function (property) {}
/**
* @param {Array.<string>} properties
* @return {!Object}
*/
Element.prototype.getProperties = function (properties) {}
/**
* @param {string} property
* @param {*} value
* @return {Element}
*/
Element.prototype.setProperty = function (property, value) {}
/**
* @param {!Object} properties
* @return {Element}
*/
Element.prototype.setProperties = function (properties) {}
/**
* @param {string} property
* @return {Element}
*/
Element.prototype.removeProperty = function (property) {}
/**
* @param {Array.<string>} properties
* @return {Element}
*/
Element.prototype.removeProperties = function (properties) {}
/**
* @param {string} key
* @param {*} value
* @return {Element}
*/
Element.prototype.store = function (key, value) {}
/**
* @param {string} key
* @param {*=} def
* @return {*}
*/
Element.prototype.retrieve = function (key, def) {}
/**
* @param {string} key
* @return {Element}
*/
Element.prototype.eliminate = function (key) {}
/**
* @constructor
* @extends Array
*/
function Elements() { }
/**
* @param {(string|!Object)} property
* @param {*=} value
* @return {Element}
*/
Elements.prototype.set = function (property, value) {}
/**
* @param {string} className
* @return {Element}
*/
Elements.prototype.addClass = function (className) {}
/**
* @param {string} className
* @return {Element}
*/
Elements.prototype.removeClass = function (className) {}
/**
* @param {string} className
* @param {boolean=} force
* @return {Element}
*/
Elements.prototype.toggleClass = function (className, force) {}
/**
* @param {(string|Element)} arg
* @return {Element}
*/
function $(arg) {}
/**
* @param {(string|Array|Element|Elements)} arg
* @param {...Element} var_args
* @return {Elements}
*/
function $$(arg, var_args) {}
//
// Element.Style
//
/**
* @param {string} property
* @return {Element}
*/
Element.prototype.setStyle = function (property, value) {}
/**
* @param {string} property
* @return {string}
*/
Element.prototype.getStyle = function (property) {}
/**
* @param {!Object} styles
* @return {Element}
*/
Element.prototype.setStyles = function (styles) {}
/**
* @param {...string} var_args
*/
Element.prototype.getStyles = function (var_args) {}
//
// Element.Event
//
/**
* @param {string} type
* @param {function()} fn
* @return {Element}
*/
Element.prototype.addEvent = function (type, fn) {}
/**
* @param {string} type
* @param {function()} fn
* @return {Element}
*/
Element.prototype.removeEvent = function (type, fn) {}
/**
* @param {!Object} events
* @return {Element}
*/
Element.prototype.addEvents = function (events) {}
/**
* @param {(string|!Object)=} events
* @return {Element}
*/
Element.prototype.removeEvents = function (events) {}
/**
* @param {string} type
* @param {(Array|Object)=} args
* @param {number=} delay
* @return {Element}
*/
Element.prototype.fireEvent = function (type, args, delay) {}
/**
* @param {Element} from
* @param {string} type
* @return {Element}
*/
Element.prototype.cloneEvents = function (from, type) {}
/**
* @param {string} type
* @param {function()} fn
*/
window.addEvent = function (type, fn) {}
/**
* @param {string} type
* @param {function()} fn
*/
window.removeEvent = function (type, fn) {}
/**
* @param {!Object} events
*/
window.addEvents = function (events) {}
/**
* @param {(string|!Object)=} events
*/
window.removeEvents = function (events) {}
/**
* @param {string} type
* @param {(Array|Object)=} args
* @param {number=} delay
*/
window.fireEvent = function (type, args, delay) {}
/**
* @param {Element} from
* @param {string} type
*/
window.cloneEvents = function (from, type) {}
//
// Element.Dimensions
//
Element.prototype.scrollTo = function () {}
Element.prototype.getSize = function () {}
Element.prototype.getScrollSize = function () {}
Element.prototype.getScroll = function () {}
Element.prototype.getPosition = function () {}
Element.prototype.setPosition = function () {}
Element.prototype.getCoordinates = function () {}
Element.prototype.getOffsetParent = function () {}
window.scrollTo = function () {}
window.getSize = function () {}
window.getScrollSize = function () {}
window.getScroll = function () {}
//
// Fx
//
/**
* @constructor
*/
function Fx() {}
/**
* @constructor
* @param {(string|Element)} el
* @param {!Object=} options
*/
Fx.Tween = function (el, options) { }
Fx.Tween.prototype.set = function () { }
Fx.Tween.prototype.start = function () { }
/**
* @constructor
* @param {(string|Element)} el
* @param {!Object=} options
*/
Fx.Morph = function (el, options) { }
/**
* @param {(string|!Object)} properties
* @return {Fx.Morph}
*/
Fx.Morph.prototype.set = function (properties) { }
/**
* @param {(string|!Object)} properties
* @return {Fx.Morph}
*/
Fx.Morph.prototype.start = function (properties) { }
/**
* @return {Element}
*/
Element.prototype.tween = function () {}
/**
* @return {Element}
*/
Element.prototype.morph = function () {}
/**
* @return {Element}
*/
Element.prototype.fade = function () {}
/**
* @return {Element}
*/
Element.prototype.highlight = function () {}
//
// Fx.Transitions
//
/**
* @constructor
*/
Fx.Transitions = function () {}
Fx.Transitions.linear = function () {}
Fx.Transitions.quad = function () {}
Fx.Transitions.cubic = function () {}
Fx.Transitions.quart = function () {}
Fx.Transitions.quint = function () {}
Fx.Transitions.pow = function () {}
Fx.Transitions.expo = function () {}
Fx.Transitions.circ = function () {}
Fx.Transitions.sine = function () {}
Fx.Transitions.back = function () {}
Fx.Transitions.bounce = function () {}
Fx.Transitions.elastic = function () {}
//
// Request
//
/**
* @constructor
* @param {!Object=} options
*/
function Request(options) { }
Request.prototype.setHeader = function () {}
Request.prototype.getHeader = function () {}
Request.prototype.send = function () {}
Request.prototype.post = function () {}
Request.prototype.get = function () {}
Request.prototype.put = function () {}
Request.prototype.cancel = function () {}
Request.prototype.isRunning = function () {}
Element.prototype.send = function () {}
/**
* @constructor
* @extends Request
* @param {!Object=} options
*/
Request.HTML = function (options) { }
/**
* @constructor
* @extends Request
* @param {!Object=} options
*/
Request.JSON = function (options) { }
//
// JSON
//
/**
* @constructor
*/
function JSON() { }
/**
* @param {Object} obj
* @return {string}
*/
JSON.encode = function (obj) {}
/**
* @param {string} string
* @param {boolean=} secure
*/
JSON.decode = function (string, secure) {}
//
// Swiff
//
/**
* @constructor
* @param {string} path
* @param {!Object} options
*/
function Swiff(path, options) { }
//
// Compat
//
/**
* @param {...*} var_args
* @nosideeffects
*/
function $pick(var_args) { }
/**
* @param {...Object} var_args
* @nosideeffects
*/
function $merge(var_args) { }
最佳答案
全面的扩展文件只是在高级模式下使用 Closure 编译器的第一步。必须编写(或修改)库本身才能使用。
externs 文件只能防止一类问题——属性和函数重命名。但是,如果不仔细清理库代码库,某些代码结构可能会在编译后中断。
例如,死代码删除可以很容易地删除错误代码(或留下应该删除的代码)。意外的别名可以阻止大多数优化的发生。 “危险地使用它”可以在最毫无戒心的地方破坏代码。
因此,即使您的代码可以编译并与您的 externs 文件一起正常工作,也不意味着其他 MooTools 程序也可以正常工作。此外,这并不意味着当您在不知不觉中使用了在编译时中断的功能时,您的程序的下一个修订版不会中断。
关于javascript - 适用于 MooTools 框架的 Google Closure Compiler 外部文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5524803/
如何指示 webpack 排除所有 d3 模块? // does not work externals: { "d3-*": "d3" } 所以如果应用导入了d3-submod
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: What does “outer =>” really mean? 我在哪里可以找到有关信息 trait After
这是一个简单的循环,我正在尝试对性能进行基准测试。 var extremeLoop=function(n){ var time=new Date() var t=0; for(
问题+概述 下面是两个片段,其中包含最初隐藏的 div,然后通过单击 button 和 jQuery 的 .show() 显示。两个 div 都具有由外部样式表应用的 display: grid; 样
我有一个 HTML 页面和一个单独的 .js 文件,该文件包含在带有 的页面中标签。 这是我的 .js 文件: element = document.getElementById("test");
我在 linux 静态库项目中有 3 个文件,我想在两个类方法实现文件中使用的静态字段存在链接问题。我有 class1.h、class1main.cpp 和 class1utils.cpp。 clas
我正在尝试将颜色背景更改为默认背景颜色,当我点击输入框外 我尝试使用“null”或“none”但没有用? window.addEventListener('click', outsideClick);
我正在编写一个应用程序,要求用户在手机上选择各种类型的文件。我使用此代码启动文件选择器 Intent : Intent intent = new Intent(Intent.ACTION_GET_C
在 android 中,不可移动(内部)的外部存储和内部存储有什么区别?我不确定在哪里保存我的数据。我只需要保存一个人可以随时提取的游戏统计数据 谢谢 最佳答案 在许多较新的设备中,将不再有物理区别,
在 C++ 中,假设我们有这个头文件: myglobals.h #ifndef my_globals_h #define my_globals_h int monthsInYear = 12; #en
我正在尝试使用 externs 在 C++ 中连接到 Ada。这两种实现有什么区别? 实现A namespace Ada { extern "C" { int getN
这个问题在这里已经有了答案: Get selected element's outer HTML (30 个答案) 关闭 2 年前。 想象一下我们有这样的东西: Hello World 如果我们这样
假设我在模块的顶部有这个: Public Declare Function getCustomerDetails Lib "CustomerFunctions" () As Long 如果我从 VB6
我目前正在使用这段代码: var wordRandomizer = { run: function (targetElem) { var markup = this.creat
我们正在使用 SVN 试水,并以 Beanstalk 作为主机。我们的设置如下所示: 存储库:模块 模块一 模块二 模块 3 存储库:网站1 自定义网站代码 svn:对模块 1 的外部引用 svn:对
有没有办法在负载均衡器中设置自动外部 IP 分配给像谷歌这样的服务? 我在裸机上运行 Kubernetes。 谢谢 最佳答案 使用 nodePort 类型的服务,它会将您的服务绑定(bind)到所有节
是否有可能在 Controller 之外使用 generateUrl() 方法? 我尝试在带有 $this->get('router') 的自定义存储库类中使用它,但它没有用。 更新 我在这里找到了一
我目前正在尝试通过 Webpack 外部对象外部化 Angular 依赖项来缩短构建时间。到目前为止,我已经为 React 和其他小库实现了这一目标。 如果我只是移动 '@angular/compil
我想创建一个自动应用其他插件的插件(外部插件)。这要求在我称为“应用插件”之前为插件设置构建脚本依赖项。但是似乎我无法在插件中添加buildscript依赖项,或者得到了: 您不能更改处于未解析状态的
我是R包的创建者EnvStats . 有一个我经常使用的函数,叫做 stripChart .我刚开始学习ggplot2 ,并在过去几天里仔细研究了 Hadley 的书、Winston 的书、Stack
我是一名优秀的程序员,十分优秀!