#dev-server #static-file #file-server #autoreload #development #proxy-server #directory

app penguin-app

具有自动重载、静态文件服务器、代理支持等功能的开发服务器。语言和框架无关。这是一个命令行应用程序,但Penguin也存在作为库。

8个版本

0.2.6 2023年11月26日
0.2.5 2022年6月22日
0.2.3 2022年4月19日
0.2.2 2021年10月2日
0.1.0 2021年3月3日

#1031 in 开发工具

MIT/Apache

105KB
1.5K SLoC

Rust 1.5K SLoC // 0.1% comments JavaScript 96 SLoC // 0.1% comments TypeScript 95 SLoC // 0.1% comments

Penguin:语言和框架无关的开发服务器

CI status of main App version on crates.io Library version on crates.io docs.rs

Penguin是一个具有实时重载、文件服务器、代理支持等功能的开发服务器。它对语言和框架无关,因此适用于几乎所有Web项目。浏览器会话可以自动重新加载(例如,当文件更改时)或显示自定义消息的覆盖层(例如,编译器错误)。

Penguin可以作为命令行应用程序(在crates.io上为penguin-app)和库使用。有关库的更多信息,请参阅其文档。本文件将主要讨论命令行应用程序。

示例

  • penguin serve .将当前目录作为文件服务器提供服务
  • penguin proxy localhost:3000将所有请求转发到https://127.0.0.1:3000
  • -m uri_path:fs_path允许您在路由器中挂载额外的目录。
  • penguin reload重新加载所有活动浏览器会话。

安装

目前,您必须自己编译应用程序。最简单的方法是从crates.io安装它

cargo install penguin-app

无需担心-app后缀:安装的二进制文件名为penguin

命令行使用

有两个主要“入口点”:penguin proxy <target>penguin serve <directory>。如果您有自己的(后端)Web服务器,例如提供API,则proxy子命令很有用。如果您只有需要提供的静态文件,例如用于静态站点生成器或无后端单页应用程序,则serve子命令很有用。

在任一情况下,您都可以使用-m/--mount在URL路径上挂载额外的目录。语法是-m <url-path>:<fs-path>,例如-m fonts:frontend/static。对于/fonts/foo.woff2的HTTP请求,会返回文件frontend/static/foo.woff2,如果该文件不存在则返回404。

Penguin默认会监视所有由其提供服务的路径。这意味着任何这些目录中的文件更改都会导致所有浏览器会话自动重新加载。您可以使用-w/--watch监视额外的路径(这些路径未挂载/提供服务)。

您也可以通过penguin reload手动重新加载所有活动浏览器会话。这通常用于构建脚本的结尾。请注意,Penguin不是一个构建系统或任务执行器!因此,您通常需要将其与其他工具结合使用,如watchexeccargo watch或其他工具。我还在开发floof,这是一个WIP文件监视器和任务运行器/构建系统,它使用Penguin作为底层来提供开发服务器。

可以使用-v/--vv和日志级别(通过-lRUST_LOG设置)修改Penguin的输出。

要运行完整的CLI文档,请执行penguin --helppenguin <subcommand> --help

项目状态和“在生产中使用”

这个项目相当年轻,测试也不是很充分。然而,它已经是我有用的开发工具之一。我感兴趣的是让尽可能多的人使用它,同时不大大增加项目的范围。

我正在寻找社区反馈:请在这个问题中发表您的看法。特别是如果您有Penguin还没有很好地服务的用例,我想了解这一点!

“我可以在生产中使用Penguin吗?”绝对不行!这是一个开发工具,您不应该将Penguin服务器公开对外开放。可能存在无数攻击向量。

版本控制和稳定性保证

应用程序和库是独立于彼此进行版本控制的。项目主要遵循常规语义版本控制指南。

  • 所需的Rust版本(MSRV)可以在任何时候提升,甚至是次要版本。一旦这个项目达到1.0,这将改变。
  • 该应用程序/库生成的所有UI(HTML/CSS)都可能随着次要版本升级而更改。例如,您不能依赖文件服务器的特定“目录列表”。
  • 服务器回复中的HTTP头可能在版本小版本升级时被添加(甚至可能被删除)。


许可证

根据您的选择,许可协议为Apache许可证2.0版本MIT许可证。除非您明确声明,否则您有意提交给本项目的任何贡献,根据Apache-2.0许可证的定义,应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~20-34MB
~695K SLoC