From d81dfc30682aecd9dabf94e6ee192fbdbd0f7fd1 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Sun, 18 Dec 2022 11:34:36 +0100 Subject: [PATCH] Refactor vite call out into utility function --- .../core/management/commands/vite_bundle.py | 23 ++--------- aleksis/core/util/frontend_helpers.py | 38 +++++++++++++++++++ aleksis/core/vite.config.js | 3 ++ 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/aleksis/core/management/commands/vite_bundle.py b/aleksis/core/management/commands/vite_bundle.py index c230fc2f4..01ab9654b 100644 --- a/aleksis/core/management/commands/vite_bundle.py +++ b/aleksis/core/management/commands/vite_bundle.py @@ -1,13 +1,11 @@ -import json import os -import shutil from django.conf import settings from django_yarnpkg.management.base import BaseYarnCommand from django_yarnpkg.yarn import yarn_adapter -from ...util.frontend_helpers import get_apps_with_assets +from ...util.frontend_helpers import run_vite, write_vite_values class Command(BaseYarnCommand): @@ -17,23 +15,10 @@ class Command(BaseYarnCommand): super(Command, self).handle(*args, **options) # Inject settings into Vite - vite_values = { - "static_url": settings.STATIC_URL, - } - # Write rollup entrypoints for all apps - vite_values["entrypoints"] = { - app: os.path.join(path, "index") - for app, path in get_apps_with_assets().items() - } - vite_values["entrypoints"]["core"] = os.path.join(settings.BASE_DIR, "aleksis", "core", "assets", "index") - with open(os.path.join(settings.NODE_MODULES_ROOT, "django-vite-values.json"), "w") as out: - json.dump(vite_values, out) + write_vite_values(os.path.join(settings.NODE_MODULES_ROOT, "django-vite-values.json")) # Install Node dependencies yarn_adapter.install(settings.YARN_INSTALLED_APPS) - # Run Vite - config_path = os.path.join(settings.BASE_DIR, "aleksis", "core", "vite.config.js") - shutil.copy(config_path, settings.NODE_MODULES_ROOT) - mode = "development" if settings.DEBUG else "production" - yarn_adapter.call_yarn(["run", "vite", "build", "-m", mode]) + # Run Vite build + run_vite(["build"]) diff --git a/aleksis/core/util/frontend_helpers.py b/aleksis/core/util/frontend_helpers.py index 664707500..379802465 100644 --- a/aleksis/core/util/frontend_helpers.py +++ b/aleksis/core/util/frontend_helpers.py @@ -1,7 +1,12 @@ +import json import os +import shutil +from typing import Any, Optional, Sequence from django.conf import settings +from django_yarnpkg.yarn import yarn_adapter + from .core_helpers import get_app_module, get_app_packages @@ -17,6 +22,39 @@ def get_apps_with_assets(): return assets +def write_vite_values(out_path: str) -> dict[str, Any]: + vite_values = { + "static_url": settings.STATIC_URL, + } + # Write rollup entrypoints for all apps + vite_values["entrypoints"] = { + app: os.path.join(path, "index") for app, path in get_apps_with_assets().items() + } + vite_values["entrypoints"]["core"] = os.path.join( + settings.BASE_DIR, "aleksis", "core", "assets", "index" + ) + with open(out_path, "w") as out: + json.dump(vite_values, out) + + +def run_vite(args: Optional[Sequence[str]] = None) -> None: + args = list(args) if args else [] + + config_path = os.path.join(settings.BASE_DIR, "aleksis", "core", "vite.config.js") + shutil.copy(config_path, settings.NODE_MODULES_ROOT) + + mode = "development" if settings.DEBUG else "production" + args += ["-m", mode] + + log_level = settings.LOGGING["root"]["level"] + if settings.DEBUG or log_level == "DEBUG": + args.append("-d") + log_level = {"INFO": "info", "WARNING": "warn", "ERROR": "error"}.get(log_level, "silent") + args += ["-l", log_level] + + yarn_adapter.call_yarn(["run", "vite"] + args) + + def get_language_cookie(code: str) -> str: """Build a cookie string to set a new language.""" cookie_parts = [f"{settings.LANGUAGE_COOKIE_NAME}={code}"] diff --git a/aleksis/core/vite.config.js b/aleksis/core/vite.config.js index b917bbef0..f48cb2d6b 100644 --- a/aleksis/core/vite.config.js +++ b/aleksis/core/vite.config.js @@ -19,6 +19,9 @@ export default defineConfig({ plugins: [nodeResolve({modulePaths: [path.resolve("./node_modules")]}), graphql()], }, }, + server: { + strictPort: true, + }, plugins: [vue()], resolve: { alias: { -- GitLab