feat(cli): add packageManager and devEngines detection

This commit is contained in:
Tat Dat Duong
2025-03-25 23:26:04 +01:00
parent 70b8391a89
commit 0d185d43ed
+35 -1
View File
@@ -1022,6 +1022,27 @@ def node_config_to_docker(
except OSError:
return False
def get_pkg_manager_name():
try:
with open(config_path.parent / "package.json") as f:
pkg = json.load(f)
if (pkg_manager_name := pkg.get("packageManager")) and isinstance(
pkg_manager_name, str
):
return pkg_manager_name.lstrip("^").split("@")[0]
if (
dev_engine_name := (
(pkg.get("devEngines") or {}).get("packageManager") or {}
).get("name")
) and isinstance(dev_engine_name, str):
return dev_engine_name
return None
except Exception:
return None
npm, yarn, pnpm, bun = [
test_file("package-lock.json"),
test_file("yarn.lock"),
@@ -1038,7 +1059,20 @@ def node_config_to_docker(
elif bun:
install_cmd = "bun i"
else:
install_cmd = "npm i"
# read package.json
# inspired by `package-manager-detector`
pkg_manager_name = get_pkg_manager_name()
if pkg_manager_name == "yarn":
install_cmd = "yarn install --frozen-lockfile"
elif pkg_manager_name == "pnpm":
install_cmd = "pnpm i --frozen-lockfile"
elif pkg_manager_name == "npm":
install_cmd = "npm ci"
elif pkg_manager_name == "bun":
install_cmd = "bun i"
else:
install_cmd = "npm i"
store_config = config.get("store")
env_additional_config = (
""