From 121d4d347f58b19abc8ea4bbc72a5bee4faaaa25 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Fri, 25 Mar 2022 19:45:24 +0000 Subject: [PATCH] Run Django + Webpack dev server concurrently without Docker --- README.md | 2 +- hooks/post_gen_project.py | 57 ++++++++++++++-------- {{cookiecutter.project_slug}}/package.json | 1 + 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 2cfa5f360..d9cc0e6b0 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ production-ready Django projects quickly. - Registration via [django-allauth](https://github.com/pennersr/django-allauth) - Comes with custom user model ready to go - Optional basic ASGI setup for Websockets -- Optional custom static build using Gulp and livereload +- Optional custom static build using Gulp or Webpack - Send emails via [Anymail](https://github.com/anymail/django-anymail) (using [Mailgun](http://www.mailgun.com/) by default or Amazon SES if AWS is selected cloud provider, but switchable) - Media storage using Amazon S3 or Google Cloud Storage - Docker support using [docker-compose](https://github.com/docker/compose) for development and production (using [Traefik](https://traefik.io/) with [LetsEncrypt](https://letsencrypt.org/) support) diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index 599fde199..06f8577c7 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -136,13 +136,14 @@ def update_package_json(remove_dev_deps=None, remove_keys=None, scripts=None): fd.write("\n") -def handle_js_runner(choice): +def handle_js_runner(choice, use_docker, use_async): if choice == "Gulp": update_package_json( remove_dev_deps=[ "@babel/core", "@babel/preset-env", "babel-loader", + "concurrently", "css-loader", "mini-css-extract-plugin", "postcss-loader", @@ -162,23 +163,37 @@ def handle_js_runner(choice): ) remove_webpack_files() elif choice == "Webpack": - update_package_json( - remove_dev_deps=[ - "browser-sync", - "cssnano", - "gulp", - "gulp-imagemin", - "gulp-plumber", - "gulp-postcss", - "gulp-rename", - "gulp-sass", - "gulp-uglify-es", - ], - scripts={ - "dev": "webpack serve --config webpack/dev.config.js ", - "build": "webpack --config webpack/prod.config.js", - }, - ) + scripts = { + "dev": "webpack serve --config webpack/dev.config.js", + "build": "webpack --config webpack/prod.config.js", + } + remove_dev_deps = [ + "browser-sync", + "cssnano", + "gulp", + "gulp-imagemin", + "gulp-plumber", + "gulp-postcss", + "gulp-rename", + "gulp-sass", + "gulp-uglify-es", + ] + if not use_docker: + dev_django_cmd = ( + "gunicorn config.asgi -k uvicorn.workers.UvicornWorker --reload" + if use_async + else "python manage.py runserver_plus" + ) + scripts.update( + { + "dev": "concurrently npm:dev:*", + "dev:webpack": "webpack serve --config webpack/dev.config.js", + "dev:django": dev_django_cmd, + } + ) + else: + remove_dev_deps.append("concurrently") + update_package_json(remove_dev_deps=remove_dev_deps, scripts=scripts) remove_gulp_files() @@ -469,7 +484,11 @@ def main(): if "{{ cookiecutter.use_docker }}".lower() == "y": remove_node_dockerfile() else: - handle_js_runner("{{ cookiecutter.frontend_pipeline }}") + handle_js_runner( + "{{ cookiecutter.frontend_pipeline }}", + use_docker=("{{ cookiecutter.use_docker }}".lower() == "y"), + use_async=("{{ cookiecutter.use_async }}".lower() == "y"), + ) if "{{ cookiecutter.cloud_provider }}" == "None": print( diff --git a/{{cookiecutter.project_slug}}/package.json b/{{cookiecutter.project_slug}}/package.json index 0fcf3570d..8137aa51b 100644 --- a/{{cookiecutter.project_slug}}/package.json +++ b/{{cookiecutter.project_slug}}/package.json @@ -11,6 +11,7 @@ "browser-sync": "^2.27.7", "css-loader": "^6.5.1", "gulp-concat": "^2.6.1", + "concurrently": "^7.0.0", "cssnano": "^5.0.11", "gulp": "^4.0.2", "gulp-imagemin": "^7.1.0",