Повторное использование кода ES2016 между приложениями Aurelia

Работая над несколькими приложениями Aurelia, мы пришли к тому, что нам нужно использовать общий код между этими приложениями.

Код для совместного использования — это не то, что мы (фактически наш клиент) хотели бы иметь в открытом доступе. Поэтому мы подумали о создании частных пакетов jspm, чтобы при необходимости можно было легко повторно использовать наши модули. Эта идея основана на этом сообщение в блоге

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

Рабочий процесс со связанными пакетами jspm

Таким образом, наш предполагаемый рабочий процесс состоит в том, чтобы создать различное количество проектов/модулей с кодом ES2016 и создать пакеты jspm из этих проектов. Затем эти пакеты будут установлены и связаны в наших приложениях.

Транспиляция

Насколько нам известно, пакеты jspm необходимо транспилировать, прежде чем вы установите их в свой проект. Поэтому нам всегда нужно транспилировать код, если есть какие-либо изменения.

В соответствии с этой документацией systemjs/babel-plugin будет поддерживаться транспиляция "на лету" в version 0.17 (на данный момент находится в стадии бета-тестирования). В настоящее время мы используем jspm версию 0.16.32, которая не поддерживает транспиляцию "на лету" с babel 6.

Почему-то этот рабочий процесс кажется слишком сложным, поэтому мы рассматриваем транспиляцию «на лету» в наших приложениях, хотя и опасаемся снижения производительности.

Как бы вы подошли к совместному использованию кода es2016 между различными приложениями Aurelia?

Можно ли как-то добиться повторного использования кода без использования пакетов jspm?


person Andrew    schedule 08.04.2016    source источник
comment
Все, что вы сказали, имеет смысл для меня. Я думаю, что транспиляция на лету может плохо сказаться на производительности. Да, каждый раз, когда вы обновляете модуль, вам придется обновлять его и в других проектах. Как в бэкэнд, так и во фронтенд разработке рабочий процесс одинаков. Чтобы использовать новую версию, вы должны загрузить новую dll/пакет и молиться, чтобы не получить каких-либо критических изменений. Даже для API, которые теоретически никогда не изменятся, вы должны указать версию (обычно через URL-адрес или заголовок http).   -  person Fabio Luz    schedule 08.04.2016
comment
Короче говоря, ИМХО то, чего вы пытаетесь достичь, в наши дни не так просто. Даже если вы добьетесь успеха, это может иметь несколько побочных эффектов.   -  person Fabio Luz    schedule 08.04.2016
comment
Да, каждый раз, когда вы обновляете модуль, вам придется обновлять его и в других проектах: с использованием gulp bump-release или чего-то подобного в сочетании с jspm update у нас есть управление версиями. Таким образом, мы можем контролировать процесс обновления в каждом проекте, и нам не нужно молиться о критических изменениях ;-) В конце концов, мы говорим о пакетах, которые мы разрабатываем сами, поэтому критические изменения - это наименьшая из наших забот; -)   -  person Andrew    schedule 08.04.2016


Ответы (1)


Лично я бы публиковал пакеты во внутреннюю ленту npm. Настройте внутреннюю ленту так, чтобы она отражала общедоступную ленту npm, а затем настройте .npmrc так, чтобы она указывала на частную ленту. Тогда просто

jspm install npm:my-private-package
person Ashley Grant    schedule 08.04.2016
comment
Думал и об этом. Чтобы отразить общедоступную ленту, нам нужно настроить нашу собственную базу данных дивана, и я думаю, что в этом случае это не стоит усилий. - person Andrew; 09.04.2016
comment
Есть несколько вариантов, которые не требуют настройки экземпляра базы данных кушетки. Самый простой и вполне пригодный для использования, если вы небольшая организация, — это использовать sinopia. Другие варианты обычно предполагают использование такой службы, как myget.org, или опции частных модулей от npmjs.com/private-modules - person Ashley Grant; 09.04.2016
comment
Sinopia выглядит интересно, спасибо за обмен @AshleyGrant - person Andrew; 09.04.2016