Построение приложения JS для монореполяции с трансплантированной нитью с зависимостями - PullRequest
0 голосов
/ 23 сентября 2018

Я работаю над проектом, который размещен как монорепо.Для упрощения предположим, что внутри есть три не требующих объяснения пакета: server, webapp клиент и library.Структура каталогов будет выглядеть примерно так:

the-project 
  packages
    server
      src
    webapp
      src
    library
      src

Все пакеты используют нотацию типа потока, используют несколько функций> ES5 и, по этой причине, проходят вавилонскую фильтрацию.Основное отличие состоит в том, что перенос пакета webapp осуществляется через веб-пакет, тогда как server использует задачу gulp, которая запускает перенос сценария через пакет gulp-babel.library передается автоматически при построении web.

Теперь у меня проблема в том, что для построения server babel требует сначала построить library и указать package.jsonего (встроенный) основной исходный файл JS, так что его транспонированные артефакты могут быть включены.Как вы можете себе представить, это быстро стало бы проблематичным, если бы проект содержал несколько библиотек, которые активно разрабатываются (что он и делает), поскольку все это потребовало бы сборки, включая любые зависимые пакеты (например, server в этом простом случае).

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

Какие стратегии доступны для создания приложения JS узла, требующего трансплантации Babel, чтобы исходные файлы приложения, а также любые зависимости были прозрачно построены и содержались в одном выходном каталоге?


Приложение A

Упрощенное задание gulp для переноса сценариев, используемое в server.

return gulp
  .src([`src/**/*.js`], { allowEmpty: true })
  .pipe(babel({ sourceMap: true }))
  .pipe(gulp.dest('dist'));

Как может бытькак видно выше, только исходные файлы server включаютг в задании.Если изменить src, включив в него также library, задача выдаст артефакты зависимостей в собственном выходном каталоге server, а любые операторы require('library') внутри будут пытаться найти встроенные артефакты в packages/libraryа не packages/server/dist, что приводит к ошибкам импорта.

1 Ответ

0 голосов
/ 27 сентября 2018

Прежде всего, я не уверен, что делает ваш сервер.Если это соединение с базой данных или какие-то вычисления, я бы не рекомендовал строить его по webpack.Принимая во внимание, что если ваш сервер просто выполняет рендеринг на стороне сервера и выполняет некоторые вызовы API для других серверов, то я бы порекомендовал связать его с помощью webpack.

Многие проекты следуют этой философии.Например, вы можете взглянуть на нечто подобное, что я делал в одном из моих личных проектов [Blubus] .В частности, вас может заинтересовать webpack-server-config .А также вы можете посмотреть, как это делают крупные проекты, такие как spectrum .

...