Django JS Vendor 是一个轻量级的前端依赖管理工具,旨在为 Django 项目提供类似 cargo 或 pnpm 的体验,无需引入 Node.js 环境。
- 轻量级: 纯 Python 实现,无 Node.js 依赖。
- 声明式配置: 使用
pyproject.toml管理依赖。 - 版本锁定: 自动生成
js-vendor.lock确保生产环境一致性。 - 并发下载: 使用
httpx和asyncio快速并发下载。 - CDN 支持: 默认支持
unpkg,可扩展。
uv add django-js-vendorpip install django-js-vendor将 django_js_vendor 添加到 INSTALLED_APPS:
INSTALLED_APPS = [
...
"django_js_vendor",
]在项目的 pyproject.toml 中添加 [tool.django-js-vendor]:
[tool.django-js-vendor]
# 下载目录 (默认为 static/vendor)
destination = "static/vendor"
# 默认 CDN (目前支持 unpkg)
default_provider = "unpkg"
[tool.django-js-vendor.dependencies]
# 简写模式 (自动获取最新版或指定版本)
"htmx.org" = "1.9.10"
alpinejs = "3.13.3"
# 详细模式
jquery = { version = "3.7.1", files = ["dist/jquery.min.js", "dist/jquery.min.map"] }下载 pyproject.toml 中定义的所有依赖,并生成/更新 js-vendor.lock。
python manage.py vendor sync添加新包到配置并下载。
python manage.py vendor add htmx.org
python manage.py vendor add alpinejs 3.13.0移除依赖及其相关文件,并更新配置。
python manage.py vendor remove htmx.org更新依赖并刷新 lock 文件。
python manage.py vendor updateDjango JS Vendor 提供了一个便捷的模板标签,用于在 HTML 中自动引入所有已安装的依赖。
在你的基础模板(如 base.html)中:
{% load vendor_tags %}
<head>
<!-- 自动生成 <script> 和 <link> 标签 -->
{% render_vendor_assets %}
</head>它会根据 js-vendor.lock 的内容,按照 pyproject.toml 中定义的顺序,自动生成对应的 HTML 标签。
你也可以只引入特定的包:
{% render_vendor_assets 'htmx' 'alpine' %}本项目使用 uv 进行依赖管理和任务执行。
git clone https://github.com/dlivxpr/django-js-vendor.git
cd django-js-vendor使用 uv sync 安装项目依赖(包括开发依赖):
uv sync使用 uv run 执行测试套件:
uv run pytestuv run ruff check .