Как использовать правило 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 не работает должным образом. это указывает на неполное использование команды.
В настоящее время я могу сделать это в WORKSPACE
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 не был найден. Я изменил правило a кусочек. После тщательного изучения... я понимаю, что существует зависимость от babel-node, которая не выполняется в момент запуска запуска пряжи. Следующее сработало после того, как я запустил 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"
решает проблему зависимости от узла babel. Таким образом, вышеприведенное правило не работает само по себе... мне нужно выполнить bazel run @nodejs//:bin/yarn
(больше похоже на установку npm/yarn, чтобы сделать node_modules, которые содержат зависимости babel-node, доступными при запуске npm/yarn start)
Итак, моя проблема в том, что я не хочу вручную запускать bazel run @nodejs//:bin/yarn
перед выполнением моего правила. Как мне это сделать. Я полагаю, это сработает, если я перестану зависеть от babel-node... но тогда мне придется изменить свой код, чтобы не использовать синтаксис es6 (это суета). Есть ли способ сделать это с помощью genrule? или что-то...