一个用于在 Dash 应用中集成 Vite 的插件,利用 Dash 3.x hooks机制,让您能够在 Dash 应用中使用现代化的前端构建工具。
English | 简体中文
Dash Vite Plugin 是为 Plotly Dash 框架设计的插件,允许您在 Dash 应用中使用 Vite 构建工具。该插件利用 Dash 3.x 的新hooks机制,轻松将现代前端开发工具集成到您的 Dash 应用中。
通过此插件,您可以:
- 使用支持 Vite 的 Vue.js、React 或其他前端框架
- 构建优化的生产版本
- 利用现代前端工具,配置最少
- 与现有 Dash 应用无缝集成
- 自动构建和集成前端资源,无需手动干预
- ✅ 完全兼容 Dash 3.x
- ✅ 支持 Vue.js 和 React
- ✅ 自动化 Node.js 环境管理
- ✅ 支持 Less 和 Sass 预处理器
- ✅ 可配置的构建选项
- ✅ 清理构建产物功能
- ✅ 智能跳过最近构建的文件以提高性能
- ✅ 易于使用的 API
pip install dash-vite-plugin注意:此插件需要 Python 3.8 或更高版本。
-
安装插件:
pip install dash-vite-plugin
-
准备您的前端资源:
assets/ ├── js/ │ └── main.js └── vue/ └── App.vue
-
在您的 Dash 应用中使用插件:
from dash import Dash from dash_vite_plugin import VitePlugin # 创建插件实例 vite_plugin = VitePlugin( build_assets_paths=['assets/js', 'assets/vue'], entry_js_paths=['assets/js/main.js'], npm_packages=[] ) # 在创建 Dash 应用前调用 setup() vite_plugin.setup() # 创建 Dash 应用 app = Dash(__name__) # 在创建 Dash 应用后调用 use() vite_plugin.use(app)
有关详细的使用示例,请参阅示例文件:
- React Basic Demo - 集成
React的基础示例 - React Bits Grid Scan Demo - 示例:集成使用
react-bits中的GridScan组件 - React Bits Lightning Demo - 示例:集成使用
react-bits中的Lightning组件 - React Bits Shiny Text Demo - 示例:集成使用
react-bits中的ShinyText组件 - Vue Basic Demo - 集成
Vue的基础示例
这些示例展示了如何使用不同前端框架设置插件,并包含测试回调以验证集成是否正常工作。
VitePlugin 是负责管理 Vite 构建过程的主要插件类。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| build_assets_paths | List[str] | 必需 | 要构建的资源路径列表 |
| entry_js_paths | List[str] | 必需 | 入口 JavaScript 文件路径列表 |
| npm_packages | List[NpmPackage] | 必需 | npm 包列表 |
| plugin_tmp_dir | str | '_vite' | 插件临时目录 |
| support_less | bool | False | 是否支持 Less |
| support_sass | bool | False | 是否支持 Sass |
| download_node | bool | False | 如果未找到是否下载 Node.js |
| node_version | str | '18.17.0' | 要下载的 Node.js 版本 |
| clean_after | bool | False | 构建后是否清理生成的文件 |
| log_show_mode | Literal['all', 'slim', 'hide'] | 'all' | 日志显示模式 ('all' 显示所有日志, 'slim' 显示精简日志, 'hide' 不显示日志) |
| skip_build | bool | False | 是否跳过构建执行 |
| skip_build_if_recent | bool | True | 如果构建文件是最近生成的是否跳过构建 |
| skip_build_time_threshold | int | 5 | 考虑构建文件为最近的时间阈值(秒) |
设置 Vite 插件,在创建 Dash 应用之前调用。
vite_plugin.setup()将插件与 Dash 应用一起使用,在创建 Dash 应用之后调用。
vite_plugin.use(app)参数:
- app (Dash): 要使用的 Dash 应用实例
NpmPackage 用于定义要安装的 npm 包。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| name | str | 必需 | npm 包名称 |
| version | str | 'latest' | npm 包版本 |
| install_mode | Literal['-D', '-S'] | '-S' | 安装模式 (-D 表示开发依赖, -S 表示生产依赖) |
from dash_vite_plugin import NpmPackage
npm_packages = [
NpmPackage('vue'), # 使用最新版本
NpmPackage('react', '18.2.0'), # 指定版本
NpmPackage('sass', install_mode='-D'), # 作为开发依赖安装
]插件在构建过程中会创建一个临时目录来存储构建文件。默认是 _vite。您可以使用 plugin_tmp_dir 参数自定义它:
vite_plugin = VitePlugin(
# ... 其他参数
plugin_tmp_dir='my_custom_dir'
)要启用 Less 或 Sass 支持,只需将相应参数设置为 True:
vite_plugin = VitePlugin(
# ... 其他参数
support_less=True, # 启用 Less 支持
support_sass=True, # 启用 Sass 支持
)插件使用 py-node-manager 来管理 Node.js 环境:
vite_plugin = VitePlugin(
# ... 其他参数
download_node=True, # 如果未找到则下载 Node.js
node_version='18.17.0' # 指定要下载的 Node.js 版本
)构建后,您可以选择清理生成的文件以保持目录整洁:
vite_plugin = VitePlugin(
# ... 其他参数
clean_after=True # 构建后清理文件
)为了避免不必要的重复构建,插件可以跳过最近构建的文件:
vite_plugin = VitePlugin(
# ... 其他参数
skip_build_if_recent=True, # 启用构建跳过
skip_build_time_threshold=10 # 设置时间阈值为 10 秒
)-
初始化阶段:
- 插件创建必要的配置文件(vite.config.js、index.html、package.json)
- 将指定的资源文件复制到临时目录
-
安装阶段:
- 初始化 npm 环境
- 安装 Vite 和相关插件
- 安装指定的 npm 包
- 根据配置安装 Less 或 Sass 支持
-
构建阶段:
- 使用 Vite 构建资源
- 生成优化的静态文件
-
集成阶段:
- 提取构建的脚本和样式标签
- 将它们注入到 Dash 应用的 HTML 中
- 设置静态文件服务路由
-
清理阶段(可选):
- 删除临时文件和目录以保持环境整洁
dash-vite-plugin/
├── dash_vite_plugin/ # 插件源代码
│ ├── __init__.py # 包初始化文件
│ ├── plugin.py # 主插件类实现
│ └── utils.py # 工具函数和辅助类
├── tests/ # 测试文件
│ ├── conftest.py # Pytest 配置和夹具
│ ├── test_plugin.py # VitePlugin 类功能测试
│ ├── test_utils.py # 工具函数和 ViteCommand 类测试
│ └── test_dash_integration.py # 与 Dash 应用集成的集成测试
├── example_vue.py # 完整的使用示例演示插件(Vue.js版本)
├── example_react.py # 完整的使用示例演示插件(React版本)
├── pyproject.toml # 项目配置和元数据
├── requirements-dev.txt # 开发依赖
└── ruff.toml # Ruff 代码检查配置-
克隆仓库:
git clone https://github.com/HogaStack/dash-vite-plugin.git cd dash-vite-plugin -
安装开发依赖:
pip install -r requirements-dev.txt
-
安装项目:
pip install -e .
本项目使用 Ruff 进行代码检查和格式化。配置在 ruff.toml 中。
检查代码检查问题:
ruff check .自动修复代码检查问题:
ruff check . --fix检查代码是否符合格式标准而不进行更改:
ruff format . --check根据项目的风格指南格式化代码:
ruff format .# 运行 Vue.js 示例
python example_vue.py
# 运行 React 示例
python example_react.py本项目包含涵盖单元测试和集成测试的综合测试套件。
conftest.py:包含 pytest 配置和夹具test_plugin.py:测试 VitePlugin 类的主要功能test_utils.py:测试工具函数和 ViteCommand 类test_dash_integration.py:测试 VitePlugin 与 Dash 应用的集成
# 运行所有测试
python -m pytest tests/ -v
# 运行特定测试文件
python -m pytest tests/test_plugin.py -v
# 运行集成测试
python -m pytest tests/test_dash_integration.py -v确保您已安装测试依赖:
pip install -r requirements-dev.txt这将安装:
- py-node-manager:用于管理 Node.js 环境
- pytest:测试框架
- pytest-cov:测试覆盖率报告
- dash[testing]:Dash 框架测试依赖
测试涵盖以下功能:
- VitePlugin 类的初始化和配置
- 工具函数和 ViteCommand 类的功能
- 文件复制和资源处理
- 不同配置选项的集成测试
- 避免实际 Node.js 调用的模拟测试
详见 LICENSE 文件。