Почему JSC_MISSING_PROVIDE_ERROR в примере "Hello World" пловр?
Я пытаюсь начать работу с plovr, используя простой пример "Hello World" в Closure: The Definitive Guide by Michael Bolin. Но моя сборка выдает ошибку. Может ли кто-нибудь объяснить мне мою ошибку?
Вот мой макет файла:
C:\hello-plovr
├──hello-config.js
├──hello.js
└──plovr-0744c5209a34.jar
Это содержимое hello.js:
goog.provide( 'example' );
goog.require( 'goog.dom' ); // line 2
example.sayHello = function( message ) {
goog.dom.getElement( 'hello' ).innerHTML = message;
}
goog.exportSymbol( 'example.sayHello', example.sayHello );
И это содержимое hello-config.js:
{
"id": "hello-plovr",
"inputs": "hello.js",
"paths": "."
}
Вот мои результаты сборки (я добавил версию Java на случай, если это имеет значение):
C:\hello-plovr> java -jar plovr-0744c5209a34.jar build hello-config.js
JSC_MISSING_PROVIDE_ERROR. required "goog.dom" namespace never provided at hello.js line 2 : 12
BUILD FAILED: 1 Errors, 0 Warnings
Я, должно быть, упускаю что-то тривиальное, но я не вижу этого.
В случае, если это имеет значение, это было выполнено с Java 1.6.0_24:
C:\hello-plovr> java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
2 ответа
Используйте более новую версию plovr (апрель 2011 г. или позднее) ИЛИ не используйте пробелы в goog.require
, + Изменить hello.js
строка 2 выглядит следующим образом:
goog.require('goog.dom'); // NO SPACES
Сообщается об ошибке plovr здесь: http://code.google.com/p/plovr/issues/detail?id=37
Автор Plovr предлагает использовать closure-linter, поскольку он предупреждает о проблемах с пробелами:
PS C:\hello-plovr> gjslint --strict hello.js
----- FILE : C:\hello-plovr\hello.js -----
Line 4, E:0007: (New error) Should have 2 blank lines between top-level blocks.
Line 5, E:0214: Missing description in @param tag
Line 7, E:0001: Extra space after "("
Line 7, E:0001: Extra space before ")"
Line 8, E:0005: Illegal tab in whitespace before "goog.dom.getElement"
Line 8, E:0001: Extra space after "("
Line 8, E:0001: Extra space before ")"
Line 9, E:0011: Missing semicolon after function assigned to a variable
Line 11, E:0001: Extra space after "("
Line 11, E:0001: Extra space before ")"
Found 10 errors, including 1 new errors, in 1 files (0 files OK).
Some of the errors reported by GJsLint may be auto-fixable using the script
fixjsstyle. Please double check any changes it makes and report any bugs. The
script can be run by executing:
fixjsstyle --strict hello.js
Как указано, fixjsstyle
Утилита (включается при установке closure-linter) может исправить некоторые ошибки, но не все. Вероятно, нужно будет сделать ручное редактирование. Вот версия hello.js, совместимая с lint:
goog.provide('example');
goog.require('goog.dom');
/**
* @param {string} message A greeting message.
*/
example.sayHello = function(message) {
goog.dom.getElement('hello').innerHTML = message;
};
goog.exportSymbol('example.sayHello', example.sayHello);
Как отмечалось выше, это было первоначально из-за ошибки в plovr:
http://code.google.com/p/plovr/issues/detail?id=37
Однако эта ошибка в plovr была исправлена и доступна с апреля 2011 года.