Полимерная сборка с пользовательскими плагинами Babel?

Мы хотели бы иметь возможность добавлять пользовательские функции к polymer build и polymer serve путем настройки пользовательских плагинов Babel.

Например, поскольку полимер-кли использует Babel внутри, мы должны добавить файл babel.config.js в нашу рабочую область/корневой каталог проекта, например:

module.exports = function (api) {

  api.cache(true);


  const presets = [ ];
  const plugins = [
 "@babel/plugin-proposal-optional-chaining"
 ];


  return {
    presets,
    plugins
  };
}

... и затем мы могли бы обслуживать или создавать наш проект с поддержкой опциональной цепочки и т. д. Это позволило бы нам делать все, что угодно, написав дополнительные плагины babel для обработки таких вещей, как минимизация внутри строк HTML шаблона...

К сожалению, в настоящее время это не работает. polymer-build, кажется, загружает конфигурацию (из-за использования babel/core?), но polymer-analyze нет. Ошибка генерируется на этапе оптимизации сборки, выполняемом полимерным анализом, как только он встречает синтаксис необязательной цепочки в нашем исходном коде:

error:  Error: Unable to get document file:///.../somefile.js: This experimental syntax requires enabling the parser plugin:  
'optionalChaining' (423:6)  
    at BuildAnalyzer.<anonymous> (/usr/local/share/.config/yarn/global/node_modules/polymer-build/lib/analyzer.js:342:23)
    at Generator.next (<anonymous>)  
    at fulfilled  (/usr/local/share/.config/yarn/global/node_modules/polymer-build/lib/analyzer.js:17:58)
    at process._tickCallback (internal/process/next_tick.js:68:7)

polymer serve тоже выдает ошибку:

Error { SyntaxError: This experimental syntax requires enabling the parser plugin: 'optionalChaining' (423:6)
    at Parser.raise (/usr/local/share/.config/yarn/global/node_modules/babylon/lib/index.js:776:15)  
    at Parser.expectPlugin (/usr/local/share/.config/yarn/global/node_modules/babylon/lib/index.js:2084:18)  
...   
pos: 13056,   loc: Position { line: 423, column: 6 },  
missingPlugin: [ 'optionalChaining' ] }

В обоих случаях я подтвердил, что файл babel.config.js загружается. Но babel включен в несколько разных пакетов, используемых в полимер-кли, поэтому я подозреваю, что в некоторых из них babel используется без информации о конфигурации (загрузили babel/core).

Может ли кто-нибудь, связанный с полимерным проектом, подтвердить, правильно ли я определил основную проблему? Я изучаю возможность внести исправление/улучшение, если объем не слишком велик.

Спасибо.


person Scott Smith    schedule 13.12.2018    source источник


Ответы (1)


Думаю для этого нужно написать свой кастомный билд. Polymer-cli также предоставит свой инструмент для этого. Взгляните на этот пример: https://github.com/PolymerElements/generator-polymer-init-custom-build

person Pascal L.    schedule 14.12.2018