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

penguin

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

9个版本

0.1.8 2023年11月26日
0.1.7 2022年6月22日
0.1.5 2022年4月19日
0.1.4 2021年10月2日
0.1.1 2021年3月7日

#307 in 开发工具


用于 2 crates

MIT/Apache

78KB
1.5K SLoC

Rust 1K SLoC // 0.1% comments JavaScript 97 SLoC // 0.1% comments TypeScript 96 SLoC // 0.1% comments

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

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

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

企鹅可以作为命令行应用程序(crates.io上的penguin-app)和库提供。有关库的更多信息,请参阅其文档。本文档的其余部分将主要讨论CLI应用程序。

示例

  • 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

CLI使用

存在两个主要的“入口点”:penguin proxy <目标>penguin serve <目录>。如果您的个人电脑上有一个(后端)网络服务器,例如提供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,这是一个正在进行的文件监视器和任务运行器/构建系统,它使用Penguin作为底层来提供开发服务器。

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

要运行完整的CLI文档,请运行penguin --helppenguin <子命令> --help

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

这个项目相对较新,尚未经过充分测试。然而,它已经成为了我的一个有用的开发工具。我感兴趣的是让尽可能多的人使用它,同时不扩大项目范围。

我在寻找社区反馈:请在这个问题中发表您的意见。特别是如果您有一个Penguin尚未很好地解决的问题,我想知道!

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

版本和稳定性保证

应用程序和库是独立版本化的。该项目主要遵循通常的语义版本控制指南。

  • 所需的Rust版本(MSRV)可以在任何时间提升,甚至在次要版本中。一旦本项目达到1.0,这种情况将改变。
  • 本应用/库生成的所有UI(HTML/CSS)都可能随着小版本更新而更改。例如,你不能依赖于文件服务器的特定“目录列表”。
  • 即使在小版本更新中,服务器响应中的HTTP头也可能被添加(或甚至可能被删除)。


许可证

您可以根据自己的选择,在以下两个许可证之一下使用:[Apache License, Version 2.0](https://github.com/lukaskalbertodt/penguin/blob/406fde018f00280e986166b8ae4b34b2d18d6f7a/lib/LICENSE-APACHE) 或 [MIT许可证](https://github.com/lukaskalbertodt/penguin/blob/406fde018f00280e986166b8ae4b34b2d18d6f7a/lib/LICENSE-MIT)。除非您明确表示,否则您有意提交以包含在此项目中的任何贡献,如Apache-2.0许可证中定义,应以上述双重许可,无任何额外条款或条件。

依赖项

~16–28MB
~607K SLoC