diff --git a/aleksis/core/management/commands/vite_bundle.py b/aleksis/core/management/commands/vite_bundle.py index c230fc2f47b472313ba86e43a715d3dc58abe54f..01ab9654bb4bdfa813fd23241b80fbe7cf1c5c15 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 664707500bda7ffde9d5d8456be39128cf55ff8f..3798024658aca54d2661bf7921fd35bdcd967ff7 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 b917bbef0f083e115605594f467d3161df1a38b8..f48cb2d6bb739ae84ace41df849e29a9cb52db50 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: {