Skip to main content

Canonical Webteam Flask-Vite integration

A Flask extension that integrates with Vite, enabling use of Vite's dev server and static builds with as little configuration as possible.

Features

  • easy to configure
  • simple API
  • supports custom Vite configurations
  • supports multiple JS entry points
  • supports all Vite-compatible JS frameworks
  • supports all Vite-compatible stylesheet languages
  • hot reloading in development mode
  • modulepreload hints for JS chunks in production mode
  • injects nonce attributes into script and link tags automatically (if flask.request.CSP_NONCE is set)

How to use the extension

Install

To install this extension as a requirement in your project, you can use PIP:

pip install canonicalwebteam.flask-vite

Update your Vite configuration

Set build.manifest to true in your Vite config.

Configure

The extension reads the following values from the Flask app.config object:

  • VITE_MODE: "development" | "production" - type of environment in which the Vite integration will run. Defaults to "production".
  • VITE_PORT: int - port where Vite's dev server is running. Defaults to 5173.
  • VITE_OUTDIR: str - file system path where the Vite output is expected; the path can be absolute or relative to the Flask app's root directory. Defaults to "static/dist".
  • VITE_MANIFEST_PATH: str: Path to the Vite manifest file, relative to VITE_OUTDIR. Defaults to .vite/manifest.json (the standard for Vite v5, v6, and v7). For vite v4 and below the path is manifest.json
  • VITE_REACT: bool - only needed for React projects; set to True to inject React HMR dev tools in dev mode. Defaults to False.

Note: the extension does NOT manage the state of the Vite dev server nor produce the static builds, you are responsible for running the appropriate Vite commands before initializing the extension.

Initialize

from canonicalwebteam.flask_vite import FlaskVite
vite = FlaskVite()
vite.init_app(app)

Import resources

The extension adds a new template global function named vite_import. To include a script or stylesheet, simply invoke this template function passing the path to the file you want to import, relative to the app's root directory.

Example

To import a script whose path is < flask app directory >/js/app/main.ts:

{ vite_import("js/app/main.ts") }

Note: when importing a file via vite_import, make sure it's also declared as an entry point in your Vite config (under build.rollupOptions.input); if this isn't the case, the import will break in production mode. This is because Vite's build won't contain the file you're trying to import, so vite_import will throw a ManifestContentException when attempting to resolve the filesystem path.

Minimal usage example

# app.py

# ...
app.config["VITE_MODE"] = "development" if app.debug else "production"

FlaskVite(app)

#...
<!-- templates/index.html -->
<head>
  { vite_import("path/to/source/styles.scss") }
</head>
<body>
  { vite_import("path/to/source/file.tsx") }
</body>

For a more fleshed-out example check the example directory.

Development

The package leverages poetry for dependency management.

To set up the virtual env and install dependencies, run:

poetry install

Testing

Unit tests can be run using:

poetry run python3 -m unittest discover tests

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

canonicalwebteam_flask_vite-0.6.0.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

canonicalwebteam_flask_vite-0.6.0-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file canonicalwebteam_flask_vite-0.6.0.tar.gz.

File metadata

File hashes

Hashes for canonicalwebteam_flask_vite-0.6.0.tar.gz
Algorithm Hash digest
SHA256 383b0e790419473dbab13e1b9306788b8e8af6f917501f52763943a634764144
MD5 5b2d1c68aee69c6e31c4fd1457e27faf
BLAKE2b-256 67d6431763938016f61ad9ff81230c3fdae2e76f08e52f9116fac1b3f9e86aa7

See more details on using hashes here.

File details

Details for the file canonicalwebteam_flask_vite-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for canonicalwebteam_flask_vite-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ed675723f315bff0bcac0721f3aae0280bd2380c6cc3cf052831f7935980cc76
MD5 dbe5439de037c0775b4d8f21457979c7
BLAKE2b-256 2b0a579349b53b2dc5a4a1040bb931a404ce3e386d7d7a45485e384e2db4f090

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page