自去年夏天以来，我或多或少一直在 [Neotoma](https://neotoma.io)（以前称为 Asheville）全职工作，因此我第一次有机会真正接触开源软件。

我很高兴地说，除了开发特定于 Neotoma 的公开可用存储库之外，我还创建了一些存储库，这些存储库有望作为其他 Node.js 应用程序的模块有用：

- [Park Ranger](https://github.com/markmhx/park-ranger)：环境特定依赖项的管理器，例如环境变量、配置文件和 SSL 证书文件。

  之所以称为“公园护林员”，是因为计算机程序始终在给定环境中运行，该环境通常由其设备或该设备中选择的特定环境以及其他可能的环境决定。当您享受自然环境并对此有疑问时，您会去找谁……？没错，公园管理员。

  我基本上在我的存储库中不断重写相同的实用程序代码，以处理基于环境的差异，主要是我的本地开发计算机和部署主机之间的差异。因此，我将其全部重构到这个模块中，以加快代码改进和维护的速度。我的出发点是 [dotenv](https://github.com/motdotla/dotenv)，但我很快意识到它对于我的需求来说太简单了。

- [Hoist](https://github.com/markmhx/grunt-hoist)：一套 Grunt 任务，用于将 Node.js 应用程序部署到主机并执行相关的远程过程。

  与我在 Park Ranger 上的经历类似，我发现自己重写了跨存储库的相同部署例程的细微变化（例如 rsync 文件、运行“npm install”并重新启动远程服务器）。因此，我创建了这组任务（它们自动将其作为 npm 脚本提供给父项目）来标准化我处理此问题的方式。它们还极大地简化了我的持续开发方法，即使我在此过程中启动新的微服务或快速更改本地依赖项也是如此。

- [代理](https://github.com/neotoma/proxy)：HTTP 和 HTTPS 请求的代理服务器。

  当我开始托管 Neotoma 的早期版本进行封闭测试时，我需要一种简单的方法来支持跨协议（HTTP 与 HTTPS）、端口和子域在同一主机上运行的不同服务器。例如，使用 HTTP 为 Neotoma 登陆页面提供服务的同一主机还向其底层 API 提供 HTTPS 请求，以及向在子域上运行的实际 Neotoma Web 应用程序提供 HTTP 和 HTTPS 请求以进行测试。

  虽然此存储库位于 Neotoma 组织下，但任何想要对其运行多个服务器的主机执行相同操作的人都可以使用它。

还有许多其他正在开发的与 Neotoma 更直接相关的公共存储库，我不会在这里列出，但可以在 [Neotoma GitHub 组织](https://github.com/neotoma) 上找到。虽然我还没有积极寻求贡献，但如果您想进行任何更改，上面列出的和该组织中的所有存储库都可以接受拉取请求！