интеграция базеля и веб-пакета - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь внести веб-пакет в монорепо, созданное bazel.

У меня есть что-то вроде

source/
-moduleA/
-moduleB/
--package.json
--static/
---image.png
--source/
---foo.ts
---bar.js
---baz.jsx

Я настроил webpack.config.js так, чтобы когда я запустить webpack я получаю что-то вроде:

dist/
-generated.html
-bundled.js
-copied/
--css/
--img/

Насколько мне известно, это создает веб-приложение. Если я буду обслуживать /dist, мой браузер загрузит generated.html, который, в свою очередь, загрузит другие файлы.

Bazel не нравится мой /dist dir, но я не могу понять все ошибки, с которыми я столкнулся. Я пытаюсь запустить что-то вроде этого

genrule(
  name = "webpack_stuff",
  srcs = [
    ":deps"
  ],
  cmd = " && ".join([
    "cd source/core/viewer",
    "node node_modules/webpack/bin/webpack.js --config webpack.prod.js --output-path $@",
  ]),
  outs = ["dist"],
  visibility = [
    "//visibility:public",
  ],
)

Я не совсем уверен, что я настраиваю, когда настраиваю, но иногда я получаю жалобу, что "dist" - это каталог, в других случаях он жалуется на работу с файловой системой только для чтения.

Я ожидал, что если я смогу запустить npm run build или webpack без Базеля, то я смогу запустить его с Базелем. Похоже, что это должен быть некоторый промежуточный шаг для bazel, поскольку он должен сделать что-то похожее на развертывание в моем сознании неспециалиста, с результатами из веб-пакета. Я даже могу сжать все результаты в /dist, но все еще не знаю, как заставить Базеля это принять.

Могу ли я как-нибудь сказать Базелу "сделать файл webpacked.zip и затем использовать его в своих следующих шагах"?

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

1 Ответ

1 голос
/ 05 февраля 2020

genrule не знает, как работать с каталогами в его outs. Существует несколько подходов:

  1. Заархивируйте все в выходном каталоге как последний шаг в genrule и объявите этот zip-файл в outs. Недостатком является то, что вы должны архивировать и разархивировать каждый шаг, связанный с этими файлами (пропуск сжатия может немного ускорить это).

  2. Писать правила Starlark, где есть API для работа с выходами каталога. Подробнее о том, как это сделать, можно узнать из этого вопроса: Bazel: genrule, который выводит каталог

  3. Появятся nodejs правила базеля для поддержки веб-пакета: https://github.com/bazelbuild/rules_nodejs/tree/c5d09095ba4653b4cd5837360e13ff2b105ba3be/examples/react_webpack Так что, возможно, попробуйте исследовать, используя правила nodejs.

...