Как использовать правило nodejs_binary
для стандартного запуска npm. Я могу запустить типичный проект узла, используя это правило. Однако я хочу запустить скрипт запуска в package.json. Пока у меня есть следующее в моем файле сборки
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
nodejs_binary(
name = "app",
data = [":app_files"],
node="@nodejs//:bin/npm",
entry_point = "workspace_name/src/server.js",
node_modules = "@npm_deps//:node_modules",
args=["start"]
)
Это не запускает сервер .. как-то команда npm работает неправильно. это указывает на использование команды в неполной.
В настоящее время я могу сделать это в РАБОЧЕМ ПРОСТРАНСТВЕ
bazel run @nodejs//:bin/yarn
(запускает установку пряжи и устанавливает все узлы-модули)
bazel run @nodejs//:bin/npm start
(запускается сервер)
В моем package.json у меня есть
{
"scripts": {
"start": "babel-node src/server.js",
...
}
...
}
Мне нужно, чтобы это работало с правилом nodejs_binary и впоследствии node_image
Я перешел от использования npm к использованию yarn..workspace_name / src / server.js .. сейчас вызывается, но потом у меня возник другой набор проблем, babel-node не был найден.
Я немного изменил правило. После тщательного изучения ... я понимаю, что существует зависимость от babel-узла, которая не удовлетворяется во время вызова запуска пряжи. Следующее сработало после того, как я запустил bazel run @nodejs//:bin/yarn
до запуска правила.
nodejs_binary(
name = "app",
args = ["start"],
data = [
":app_files",
"@//:node_modules",
],
entry_point = "workspace_name/src/server.js",
node = "@nodejs//:bin/yarn",
node_modules = "@npm_deps//:node_modules",
)
Похоже, что "@//:node_modules"
решает проблему зависимости вавилонского узла. Таким образом, вышеприведенное правило не работает само по себе ... мне нужно сделать bazel run @nodejs//:bin/yarn
(больше похоже на установку npm / yarn, чтобы сделать node_modules, которые содержат зависимость babel-node, доступными при запуске запуска npm / yarn)
Так что моя проблема в том, что я не хочу вручную запускать bazel run @nodejs//:bin/yarn
перед выполнением моего правила. Как мне это сделать.
Я полагаю, что это сработало бы, если бы я перестал зависеть от babel-узла ... но тогда мне пришлось бы изменить свой код, чтобы не использовать синтаксис es6 (что является суетой). Есть ли способ, которым я могу сделать это с помощью genrule? или что-то ...