閉包編譯器警告有關在extern上未定義的屬性,只要我可以告訴屬性在該extern上定義。Closure編譯器對來自extern的未定義屬性發出警告
我想得到封閉編譯器乾淨地編譯這個沒有發出這個警告。
我使用編譯器下列選項:
- angular_pass
- compilation_level = ADVANCED_OPTIMIZATIONS
- create_source_map
- language_in = ECMASCRIPT5_STRICT
- manage_closure_dependencies
- warning_level = VERBOSE
所產生的警告是:
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);
我給角平移的extern包含以下內容:
/**
* @fileoverview Externs for Angular Translate.
* @externs
*/
/**
* Base namespace
* @type {Object}
* @const
*/
var pascalprecht = {};
goog.provide('pascalprecht');
/**
* angular-translate namespace
* @type {Object}
* @const
*/
pascalprecht.translate = {};
goog.provide('pascalprecht.translate');
/**
* The $translate service
* @constructor
*/
pascalprecht.translate.$translate;
goog.provide('pascalprecht.translate.$translate');
/**
* Returns a translation instantly from the internal state of loaded translation. All rules
* regarding the current language, the preferred language of even fallback languages will be
* used except any promise handling. If a language was not found, an asynchronous loading
* will be invoked in the background.
*
* @param {string} translationId Translation ID
* @param {Object=} interpolateParams Params
* @param {string=} interpolationId
*
* @return {string} translation
*/
pascalprecht.translate.$translate.instant = function (translationId, interpolateParams, interpolationId) {};
goog.exportProperty(pascalprecht.translate.$translate, 'instant', pascalprecht.translate.$translate.instant);
我不認爲goog.provide()和goog.exportProperty()調用是需要在外部n文件。我已經在文件中測試了它們,沒有測試它們,但它們似乎沒有任何區別。
我正在使用grunt-closure-compiler grunt helper運行閉包。
更改爲warning_level = QUIET確實消除了警告,但它也消除了有關事情的警告。例如,如果我改變調用此:
target = $translate.instatn(texts.toString(());
我想獲得一個警告,因爲在$無instatn()函數翻譯對象。
在這種情況下,我需要更改以獲取閉包編譯器以找到正確的extern函數?
您使用warning_level = QUIET測試了嗎? – gabrieloliveira
warning_level = QUIET確實消除了警告,但是如果我拼錯函數instatn warning_level = QUIET不會抱怨。我想保留有關代碼有效問題的警告。 – garethm
我現在明白了。在從外部js加載值之前,您無法定義此屬性?這是不正確的,但我相信不是工作。 – gabrieloliveira