71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
|
|
"""以 livereload 提供静态资源目录:保存 HTML/JS/CSS 时浏览器自动刷新。
|
|||
|
|
|
|||
|
|
需 dev 依赖:``uv sync --group dev``(``livereload``)。
|
|||
|
|
|
|||
|
|
用法:
|
|||
|
|
uv run --group dev python scripts/dev_static_livereload.py --root web/voice-confirmation
|
|||
|
|
uv run --group dev python scripts/dev_static_livereload.py --root web/voice-confirmation -p 8080 --host 127.0.0.1
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
import argparse
|
|||
|
|
import sys
|
|||
|
|
from pathlib import Path
|
|||
|
|
|
|||
|
|
|
|||
|
|
def main() -> None:
|
|||
|
|
try:
|
|||
|
|
from livereload import Server
|
|||
|
|
except ImportError as exc: # pragma: no cover
|
|||
|
|
print(
|
|||
|
|
"需要安装 dev 依赖: uv sync --group dev (需含 livereload)",
|
|||
|
|
file=sys.stderr,
|
|||
|
|
)
|
|||
|
|
raise SystemExit(1) from exc
|
|||
|
|
|
|||
|
|
p = argparse.ArgumentParser(description="Static site + browser live reload (livereload)")
|
|||
|
|
p.add_argument(
|
|||
|
|
"--root",
|
|||
|
|
type=Path,
|
|||
|
|
required=True,
|
|||
|
|
help="要托管的目录(如 web/voice-confirmation)",
|
|||
|
|
)
|
|||
|
|
p.add_argument("--host", default="127.0.0.1")
|
|||
|
|
p.add_argument("-p", "--port", type=int, default=8080)
|
|||
|
|
p.add_argument(
|
|||
|
|
"--extra-watch",
|
|||
|
|
type=Path,
|
|||
|
|
action="append",
|
|||
|
|
default=[],
|
|||
|
|
help="额外监视路径(可重复),变更时触发自动刷新",
|
|||
|
|
)
|
|||
|
|
args = p.parse_args()
|
|||
|
|
root: Path = args.root.resolve()
|
|||
|
|
if not root.is_dir():
|
|||
|
|
print(f"不是目录: {root}", file=sys.stderr)
|
|||
|
|
raise SystemExit(2)
|
|||
|
|
|
|||
|
|
server = Server()
|
|||
|
|
server.watch(str(root))
|
|||
|
|
for w in args.extra_watch:
|
|||
|
|
wp = w.resolve()
|
|||
|
|
if wp.exists():
|
|||
|
|
server.watch(str(wp if wp.is_file() else wp))
|
|||
|
|
|
|||
|
|
url = f"http://{args.host}:{args.port}/"
|
|||
|
|
print(f"Livereload 静态根目录: {root}")
|
|||
|
|
print(f"访问: {url} (编辑目录内文件后应自动刷新浏览器;首次请手动打开)")
|
|||
|
|
print("按 Ctrl+C 停止。")
|
|||
|
|
server.serve(
|
|||
|
|
host=args.host,
|
|||
|
|
port=args.port,
|
|||
|
|
root=str(root),
|
|||
|
|
open_url=False,
|
|||
|
|
debug=False,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|