Javascript 闭包编译器从外部警告未定义的属性
闭包编译器会发出关于未在外部上定义的属性的警告,而据我所知,该属性是在该外部上定义的 我想让闭包编译器干净地编译它,而不发出警告 我正在为编译器使用以下选项:Javascript 闭包编译器从外部警告未定义的属性,javascript,google-closure-compiler,angular-translate,Javascript,Google Closure Compiler,Angular Translate,闭包编译器会发出关于未在外部上定义的属性的警告,而据我所知,该属性是在该外部上定义的 我想让闭包编译器干净地编译它,而不发出警告 我正在为编译器使用以下选项: 角球传球 编译级别=高级优化 创建源映射 语言\u in=ECMAScript 5\u严格 管理\u关闭\u依赖项 警告级别=详细 产生的警告是: trFilter.js:19: WARNING - Property instant never defined on pascalprecht.translate.$translate
- 角球传球
- 编译级别=高级优化
- 创建源映射
- 语言\u in=ECMAScript 5\u严格
- 管理\u关闭\u依赖项
- 警告级别=详细
trFilter.js:19: WARNING - Property instant never defined on pascalprecht.translate.$translate
target = $translate.instant(texts.toString());
^
产生警告的文件包含以下内容:
var myApp = {};
/*
* The trFilter generates translated strings.
*/
(function () {
'use strict';
/**
* @param {pascalprecht.translate.$translate} $translate
* @returns {function((Array.<string>|string)): string}
*/
var trFilter = function ($translate) {
return function(texts) {
var target;
target = $translate.instant(texts.toString());
return target;
};
};
myApp.trFilter = ['$translate', trFilter];
})();
angular.module('myApp')
.filter('tr', myApp.trFilter);
我认为外部文件中不需要goog.provide()和goog.exportProperty()调用。我在文件中测试了有和没有它们,但它们似乎没有任何区别
我正在使用grunt闭包编译器grunt助手运行闭包
更改为warning_level=QUIET确实消除了警告,但也消除了有关可能出现问题的警告。例如,如果我将呼叫更改为:
target = $translate.instatn(texts.toString(());
我想得到一个警告,因为$translate对象上没有instatn()函数
在这种情况下,为了让闭包编译器找到正确的外部函数,我需要做哪些更改?我尝试以下方法:
/**
* The $translate service
* @type {Object}
* @constructor
*/
pascalprecht.translate.$translate;
goog.provide('pascalprecht.translate.$translate');
(放置@type{Object})。和
“警告-未在上定义属性”
pascalprecht.translate.$translate”
不显示更多内容。您使用warning\u level=QUIET进行了测试?warning\u level=QUIET确实消除了警告,但是如果我将函数拼错为instatn warning\u level=QUIET,则不会抱怨。我想保留有关代码有效问题的警告。我现在明白了。在从外部js加载值之前不能定义此属性?这并不完全正确,但我相信这是可行的。据我所知,闭包编译器在处理代码之前从外部加载符号。我确实尝试添加goog.require('pascalprecht.translate.$translate');到服务文件的to,但这会导致编译失败,错误为“error-required”pascalprecht.translate.$translate”命名空间从未提供“我也尝试将角度转换源添加到我输入到闭包编译器的内容中,但该源包含与闭包不兼容的JSDoc标记,这会导致整个编译失败。我还需要将trFilter()的注释更改为“@param{Object}$translate”。令人惊讶的是,当使用错误的函数名时,将两者都更改为对象会使其产生错误。谢谢你的帮助。
/**
* The $translate service
* @type {Object}
* @constructor
*/
pascalprecht.translate.$translate;
goog.provide('pascalprecht.translate.$translate');