Skip to content

贡献

Fresh 是一个组织为 monorepo 的项目,包含多个包:

  • packages/fresh/ - Fresh 核心框架(@fresh/core
  • packages/plugin-vite/ - Vite 集成插件(@fresh/plugin-vite
  • packages/plugin-tailwindcss/ - Tailwind CSS v4 插件
  • packages/plugin-tailwindcss-v3/ - Tailwind CSS v3 插件
  • packages/init/ - 项目脚手架工具
  • packages/update/ - Fresh 更新工具
  • www/ - 文档网站(fresh.deno.dev)

入门

前置条件:Deno(最新版本)和 Git。

sh
git clone https://github.com/denoland/fresh.git
cd fresh
deno task ok

deno task ok 运行格式化、linting、类型检查和完整的测试套件。在提交任何拉取请求之前运行它。

该仓库使用 Deno 工作空间,因此 packages/ 中的所有包都可以使用其发布名称(@fresh/core@fresh/plugin-vite 等)自动相互使用。

开发

www/ 目录和 Vite 插件演示都使用本地 Fresh 包,使它们成为良好的集成测试:

sh
deno task www           # 文档站点开发服务器
deno task build-www     # 文档站点生产构建

deno task demo          # vite 演示开发服务器
deno task demo:build    # vite 演示生产构建
deno task demo:start    # 服务 vite 演示生产构建

在外部项目中测试

要在单独的项目中使用您的本地 Fresh 检出版本,请将 links 添加到项目的 deno.json

json
{
  "imports": {
    "@fresh/core": "jsr:@fresh/core@^2.0.0",
    "@fresh/plugin-vite": "jsr:@fresh/plugin-vite@^1.0.0"
  },
  "links": [
    "../path/to/fresh/packages/fresh",
    "../path/to/fresh/packages/plugin-vite"
  ]
}

这会用您的本地版本覆盖 JSR 包。更改会立即反映,无需重新构建。

测试

sh
# 所有测试(并行)
deno task test

# 特定的测试文件
deno test -A packages/fresh/src/app_test.ts

# 按测试名称过滤
deno test -A --filter "test name pattern"

# 在有意的输出更改后更新快照
deno test -A --update-snapshots path/to/test.ts

测试使用 @std/expect 进行断言,遵循 *_test.ts 命名约定,并需要 -A 标志。快照测试存储在 __snapshots__/ 目录中。

某些测试可能在本地失败但在 CI 中通过(Could not find server addressText file busy (os error 26))——这些可以安全地忽略。

拉取请求

  • 提交前运行 deno task ok 以尽早发现格式化、lint 和类型错误
  • 保持 PR 专注——每个 PR 一个功能或修复
  • 为任何行为更改添加或更新测试
  • 遵循现有代码风格——仓库使用 deno fmt 进行格式化,deno lint 进行 linting