项目在我的电脑上能跑,然后呢?

“在我电脑上可以运行”听起来像一句解释,其实更像一个警告。
它意味着项目可能依赖作者脑中没有写下来的步骤:某个手动创建的目录、一条忘记记录的安装命令、一张本地数据库表,或者一个只存在于开发机里的环境变量。
我也交付过这样的代码。隔一段时间再打开,连自己都要重新猜启动顺序。后来我开始把可复现性当作项目的一部分,而不是完成后顺手补上的 README。
先把“默认存在”的东西找出来
项目难以复现,往往不是核心代码有问题,而是太多条件被默认为已经存在。
我会从一台新机器的视角检查:
- 需要哪个运行时与版本
- 依赖能否通过一个明确命令安装
- 哪些配置应该来自环境变量
- 数据库怎样创建,是否有初始化脚本
- 模型、数据集或大文件从哪里获取
- 项目按什么顺序启动
- 成功后应该看到什么结果
这些问题越早回答,后面越少依赖口头说明。
依赖文件不是装饰
Python 项目需要清晰的依赖声明,Node.js 项目需要维护锁文件,Java 项目也应该让构建工具管理版本。只写包名却不考虑版本,可能让项目在几个月后安装出完全不同的环境。
依赖也不应该无限膨胀。实验过程中安装过、最终没有使用的包会增加冲突和理解成本。整理依赖的过程,本身就是一次项目清理。
配置可以有模板,但不能泄露秘密
数据库地址、接口密钥和部署参数不应该硬编码进仓库。我更愿意提供一份不含真实值的环境变量示例,并在文档中解释每个字段的作用。
这样既能告诉使用者项目需要什么,也避免把敏感信息混进提交历史。开发、测试与生产环境之间的差异,也能通过明确配置进行管理。
数据库必须能够从空白开始
一个依赖数据库的系统,如果只有我电脑里的那份数据,就无法被完整复现。
至少要保留表结构、必要的初始数据和执行顺序。对于演示项目,还可以准备少量脱敏样例,让页面启动后不是一片空白。涉及迁移时,则需要说明版本变化,而不是让使用者手动猜应该加哪一列。
README 要带人走完第一次启动
我希望一份合格的 README 能够回答:这个项目解决什么问题,目录中有什么,怎样配置和启动,如何验证成功,常见失败从哪里检查。
截图可以帮助理解最终效果,但不能替代命令与说明。相反,一长串没有上下文的命令也不够友好。最好的文档应该像一条经过验证的路径,让第一次接触项目的人少走几次弯路。
用一次“陌生人测试”结束项目
整理完成后,我会尝试清掉本地缓存,按照文档重新安装与启动。如果条件允许,也可以让没有参与开发的人照着说明操作。任何需要我在旁边补充的步骤,都说明文档里还有隐含信息。
可复现不意味着项目必须完美,也不要求为所有平台提供支持。它只是要求边界清楚:支持什么,需要什么,怎样开始,哪里可能失败。
当另一个人能够把项目运行起来,理解它的结构,并在此基础上继续修改时,代码才真正离开了我的电脑。