跳过导航,直达内容

附录A:一个完整项目的组成 📦

为什么别人的项目都有 README、LICENSE 这些文件?本章详解一个专业开源项目需要哪些文件。

📋 目录


标准项目结构

🌟 一个专业的开源项目应该长这样

my-awesome-project/
├── 📄 README.md          # 项目说明书(必需!)
├── 📄 LICENSE            # 开源协议(必需!)
├── 📄 .gitignore         # 忽略文件列表(必需!)
├── 📄 CONTRIBUTING.md   # 贡献指南
├── 📄 CODE_OF_CONDUCT.md # 行为准则
├── 📄 CHANGELOG.md      # 更新日志
├── 📄 SECURITY.md       # 安全披露政策
├── 📄 AUTHORS.md        # 作者列表
├── 📁 src/              # 源代码目录
├── 📁 tests/            # 测试代码目录
├── 📁 docs/             # 文档目录
├── 📁 examples/         # 示例代码目录
├── 📁 .github/          # GitHub 配置目录
│   ├── 📁 ISSUE_TEMPLATE/  # Issue 模板
│   ├── 📁 PULL_REQUEST_TEMPLATE/ # PR 模板
│   └── 📄 workflows/    # GitHub Actions 配置
└── 📄 package.json      # Node.js 项目的依赖配置
    📄 requirements.txt  # Python 项目的依赖配置
    📄 Cargo.toml        # Rust 项目的依赖配置

必需文件详解

1️⃣ README.md(必需!)

作用:项目的”门面”,是别人了解你项目的第一个窗口。

为什么需要:

标准 README 应该包含:

# 项目名

[简短的项目描述]

## ✨ 特性

- 特性1
- 特性2

## 🚀 快速开始

[安装和使用说明]

## 📖 文档

[详细文档链接]

## 🤝 贡献

欢迎贡献!请查看 [CONTRIBUTING.md](https://github.com/GTX950L/github-encyclopedia/blob/main/CONTRIBUTING.md)。

## 📜 许可证

本项目采用 [MIT License](https://github.com/GTX950L/github-encyclopedia/blob/main/LICENSE)。

示例:查看 Vue.js 的 README


2️⃣ LICENSE(必需!)

作用:告诉别人可以如何使用你的代码。

为什么需要:

常见开源协议对比:

协议 允许商用 允许修改 需要注明作者 要求开源你的修改
MIT ✅ ✅ ✅ ❌
Apache 2.0 ✅ ✅ ✅ ❌
GPL v3 ✅ ✅ ✅ ✅(强)
AGPL ✅ ✅ ✅ ✅(更强,包括云服务)

如何选择:

你的项目是...?
│
├─ 想让更多人使用,不在乎别人是否开源?
│   └─ 选择 MIT 或 Apache 2.0 ✅
│
├─ 想让修改后的版本也必须开源?
│   └─ 选择 GPL ✅
│
└─ 只是自己用,不想让别人用?
    └─ 不需要开源,不用放 LICENSE

如何添加 LICENSE:

方法1:在 GitHub 上创建仓库时自动生成

创建新仓库时,在 "Initialize this repository with:" 部分
勾选 "Add a license" → 选择协议

方法2:手动创建

# 在项目根目录创建 LICENSE 文件
echo "MIT License" > LICENSE
# 然后复制协议全文进去

方法3:使用命令行工具

# 使用 lice 工具快速生成
npm install -g lice
lice mit > LICENSE

3️⃣ .gitignore(必需!)

作用:告诉 Git 哪些文件不需要版本控制。

为什么需要:

标准 .gitignore 示例(Node.js 项目):

# 依赖目录
node_modules/

# 编译产物
dist/
build/

# 环境变量文件(可能包含密钥!)
.env
.env.local

# 日志文件
logs/
*.log

# 系统文件
.DS_Store  # macOS
Thumbs.db  # Windows

# IDE 配置
.vscode/
.idea/
*.swp

# 测试覆盖率报告
coverage/

如何生成 .gitignore:

方法1:GitHub 自动生成

创建仓库时,在 "Add .gitignore" 处选择语言
GitHub 会自动生成适合该语言的 .gitignore

方法2:使用 gitignore.io

# 访问 https://www.gitignore.io/
# 输入语言/框架,自动生成

# 或者在命令行使用
curl https://www.gitignore.io/api/node,visualstudiocode,osx > .gitignore

可选但推荐的文件

4️⃣ CONTRIBUTING.md(强烈推荐)

作用:告诉别人如何为你的项目做贡献。

为什么需要:

标准内容:

# 贡献指南

## 🐛 报告 Bug

请使用我们的 Bug Report Issue 模板。

## ✨ 提出新功能

请先创建 Feature Request Issue 讨论。

## 🔀 提交 Pull Request

1. Fork 本项目
2. 创建你的分支 (`git checkout -b feature/AmazingFeature`)
3. 提交你的修改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 创建一个 Pull Request

## 📋 代码规范

- 使用 2 空格缩进
- 变量名使用驼峰命名法
- 提交信息使用英文

5️⃣ CODE_OF_CONDUCT.md(推荐)

作用:制定社区行为准则,营造友好的交流环境。

为什么需要:

常用模板:Contributor Covenant


6️⃣ CHANGELOG.md(推荐)

作用:记录项目的版本更新历史。

为什么需要:

标准格式(遵循 Keep a Changelog):

# Changelog

## [1.2.0] - 2026-06-01

### ✨ Added
- 新增深色模式
- 新增多语言支持

### 🐛 Fixed
- 修复登录失败的问题
- 修复移动端显示异常

### 🔄 Changed
- 优化加载速度

## [1.1.0] - 2026-05-01

### ✨ Added
- 初始版本

7️⃣ SECURITY.md(推荐)

作用:告诉别人如何报告安全漏洞。

为什么需要:

标准内容:

# 安全披露政策

## 📧 报告安全漏洞

**请不要通过公开 Issue 报告安全漏洞!**

请发送邮件到:security@example.com

## ⏳ 响应时间

- 确认收到:24 小时内
- 初步评估:72 小时内
- 修复发布:根据严重程度,7-90 天

## 💡 负责任的披露

我们感谢您负责任地披露漏洞。在漏洞修复前,请不要公开讨论。

不同语言的项目结构

Python 项目

my_python_project/
├── 📄 README.md
├── 📄 LICENSE
├── 📄 .gitignore
├── 📄 requirements.txt   # 依赖列表
├── 📄 setup.py          # 安装脚本
├── 📄 pyproject.toml   # 现代 Python 项目配置
├── 📁 my_module/        # 源代码
├── 📁 tests/            # 测试
├── 📁 docs/             # 文档
└── 📄 .flake8          # 代码风格配置

Node.js 项目

my-node-project/
├── 📄 README.md
├── 📄 LICENSE
├── 📄 .gitignore
├── 📄 package.json      # 项目配置和依赖
├── 📄 package-lock.json # 依赖版本锁定
├── 📄 .eslintrc.json   # 代码检查配置
├── 📁 src/              # 源代码
├── 📁 test/            # 测试
├── 📁 public/          # 静态资源
└── 📄 .env.example     # 环境变量示例

Rust 项目

my-rust-project/
├── 📄 README.md
├── 📄 LICENSE
├── 📄 .gitignore
├── 📄 Cargo.toml       # 项目配置和依赖
├── 📄 Cargo.lock       # 依赖版本锁定
├── 📁 src/
│   └── 📄 main.rs      # 主程序
├── 📁 tests/           # 集成测试
└── 📁 benches/         # 性能测试

如何快速生成这些文件

方法1:使用 GitHub 模板

创建新仓库时,选择 “Use this template”:


方法2:使用命令行工具

使用 cookiecutter(Python)

# 安装
pip install cookiecutter

# 使用模板创建项目
cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage.git

使用 npm init(Node.js)

# 交互式创建 package.json
npm init

# 快速创建(使用默认值)
npm init -y

方法3:让 AI 帮你生成

示例 Prompt:

请帮我生成一个 Python 开源项目的标准文件结构,包括:
- README.md(项目是计算器库)
- LICENSE(MIT 协议)
- .gitignore(Python 项目)
- CONTRIBUTING.md
- 使用中文

AI 会为你生成所有文件!


📝 实战练习

练习1:创建标准项目结构

任务:

  1. 创建一个新的 GitHub 仓库
  2. 使用本文档的模板,创建所有必需文件
  3. 确保 LICENSE、README.md、.gitignore 都正确

练习2:为现有项目补上缺失的文件

任务:

  1. 找一个你之前的 GitHub 项目
  2. 检查是否缺少必需文件
  3. 补充 README.md、LICENSE、.gitignore

练习3:选择合适的开源协议

任务:

  1. 访问 https://choosealicense.com/
  2. 回答几个问题
  3. 确定你的项目应该用什么协议

📚 延伸阅读


📝 本章小结

你现在了解了:

💡 核心要点

一个没有 README 和 LICENSE 的项目,不算是真正的开源项目!

README 告诉别人”这是什么”,LICENSE 告诉别人”你可以怎么用”。


← 上一章  |  下一章 →