Компиляция приложения с помощью Closure Compiler

Я пытаюсь создать собственное приложение openlayers-3 в Windows 7 с помощью учебника по компиляции приложений с помощью Closure Compiler. При запуске опции сборки closure-util я получаю следующее:

C:\Roy\websites\php_js_projects\closure-compiler>node_modules\openlayers\node_mo
dules\.bin\closure-util build config.json app.js
info closure-util Reading build config
info closure-util Getting Closure dependencies
info closure-util Compiling 367 sources
child_process.js:1162
    throw errnoException(err, 'spawn');
          ^
Error: spawn ENAMETOOLONG
    at exports._errnoException (util.js:746:11)
    at ChildProcess.spawn (child_process.js:1162:11)
    at Object.exports.spawn (child_process.js:995:9)
    at Object.module.exports [as compile] (C:\Roy\websites\php_js_projects\closu
re-compiler\node_modules\openlayers\node_modules\closure-util\lib\compile.js:42:
18)
    at compile (C:\Roy\websites\php_js_projects\closure-compiler\node_modules\op
enlayers\node_modules\closure-util\lib\build.js:94:11)
    at fn (C:\Roy\websites\php_js_projects\closure-compiler\node_modules\openlay
ers\node_modules\closure-util\node_modules\async\lib\async.js:579:34)
    at Immediate._onImmediate (C:\Roy\websites\php_js_projects\closure-compiler\
node_modules\openlayers\node_modules\closure-util\node_modules\async\lib\async.j
s:495:34)
    at processImmediate [as _immediateCallback] (timers.js:358:17)

Я не нахожу поиски в Google или поиски здесь, обсуждающие эту проблему. Есть ли обходной путь?

1 ответ

У меня была именно эта проблема сегодня, и я нашел обходной путь. Я считаю, что проблема в том, что OpenLayers 3 поставляется с устаревшей версией closure-util, указанной в его package.json, Пока разработчики OpenLayers сами не указали более новую версию, я обнаружил, что переключение closure-util на последнюю версию решило эту проблему для меня.


Временное решение:

Выполните все следующие действия в каталоге OpenLayers (кажется, C:\Roy\websites\php_js_projects\closure-compiler\node_modules\openlayers в твоем случае). Для согласованности я сделал приведенные ниже примеры, ссылающиеся на ваш путь:

  1. открыто package.jsonищи "dependencies" раздел и измените версию closure-util с 1.5.0 на более новую версию (последняя версия 1.7.0 на момент написания этой статьи).

    "dependencies": {
        ..
        "closure-util": "1.5.0",
        ..
    },
    

    становится

    "dependencies": {
        ..
        "closure-util": "1.7.0",
        ..
    },
    
  2. Удалите старую версию closure-util, удалив всю closure-util каталог из node_modules каталог. (Удалять C:\Roy\websites\php_js_projects\closure-compiler\node_modules\openlayers\node_modules\closure-util в твоем случае.)

  3. Бежать npm install в то время как внутри openlayers каталог. Это заставит диспетчер пакетов узла автоматически получать последнюю версию closure-util, чтобы заменить ту, которую мы удалили на предыдущем шаге.

    C:\Roy\websites\php_js_projects\closure-compiler\node_modules\openlayers>npm install
    -
    > ws@0.4.32 install C:\Roy\websites\php_js_projects\closure-compiler\node_modules\openlayers\node_modules\closure-util\node_modules\socket.io\node_modules\socket.io-client\node_modules\ws
    ..snip..
    > closure-util@1.7.0 postinstall C:\Roy\websites\php_js_projects\closure-compiler\node_modules\openlayers\node_modules\closure-util
    > node ./bin/closure-util.js update
    
    info install Downloading http://dl.google.com/closure-compiler/compiler-20150729.zip
    ..snip..
    
  4. Попробуйте свою сборку еще раз.

    C:\Roy\websites\php_js_projects\closure-compiler>node_modules\openlayers\node_modules\.bin\closure-util build config.json app.js
    
Другие вопросы по тегам