Remote In Tech 公司档案解析:以 NVIDIA(src/companies/nvidia.md)为例解读 frontmatter 字段、hybrid 远程政策与 Eleventy 渲染链路
Remote In Tech 公司档案解析:以 NVIDIA(src/companies/nvidia.md)为例解读 frontmatter 字段、hybrid 远程政策与 Eleventy 渲染链路
本篇技术指南以远程友好科技公司目录项目 Remote In Tech 中的 NVIDIA 档案 src/companies/nvidia.md 为核心样本,系统拆解公司档案的 frontmatter 字段规范、七个正文小节的内容组织,以及从 Markdown 到 HTML 的 Eleventy 渲染链路与目录聚合逻辑。读完本文,你将掌握该目录新增/维护一家公司档案所需的全部字段语义、合法取值、构建命令与链接校验流程,并能把同一套模式套用到目录中的任意公司档案上。
一、档案文档概览:nvidia.md 在目录中的位置
Remote In Tech(remoteintech.company 的源代码仓库)是一个由社区维护的远程友好科技公司目录,所有公司档案都以独立 Markdown 文件存放在 src/companies/ 目录下。NVIDIA 的档案即对应文件 src/companies/nvidia.md。
该文件在构建系统中被三类机制消费:
- 布局选择:
src/companies/下所有.md文件共享目录级数据文件 src/companies/companies.json,其内容仅为{ "layout": "company" },即强制使用公司档案专用布局 src/_layouts/company.njk 渲染。 - 集合采集:站点通过
getFilteredByGlob('./src/companies/**/*.md')一次性收集全部公司档案(见 src/_config/collections.js),供首页精选、近期新增、按区域/技术浏览等页面使用。 - 时间戳管理:frontmatter 中的
addedAt与updatedAt字段由维护者管理,NVIDIA 档案标注的收录与更新日期均为2022-10-16(CONTRIBUTING.md 明确要求贡献者在 PR 中不要自行添加这两个日期字段)。
二、frontmatter 字段逐一拆解:NVIDIA 档案的完整元数据
nvidia.md 的 frontmatter 完整呈现了该目录要求的元数据模板,逐字段分析如下:
---
title: "Nvidia"
slug: nvidia
website: https://www.nvidia.com/
careers_url: https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite
region: other
remote_policy: hybrid
company_size: enterprise
technologies:
- javascript
addedAt: 2022-10-16
updatedAt: 2022-10-16
---
| 字段 | 值 | 语义与约束 |
|---|---|---|
title |
Nvidia |
公司展示名称,用于页面 <h1> 与按字母排序 |
slug |
nvidia |
文件命名依据,要求文件名与 slug 一致(src/companies/nvidia.md) |
website |
https://www.nvidia.com/ |
官网地址;当 careers_url 缺失时,"Apply Now" 按钮会退化为 "Visit Website" |
careers_url |
NVIDIA 官方 Workday 招聘站 | 必须指向公司自有招聘页,而非出售服务的页面 |
region |
other |
招聘区域,合法值为 worldwide / americas / europe / americas-europe / asia-pacific / other |
remote_policy |
hybrid |
远程政策,合法值为 fully-remote / remote-first / hybrid / remote-friendly |
company_size |
enterprise |
规模档位,enterprise 对应 1000+ 员工 |
technologies |
<a href="https://link.gitcode.com/i/bd9b720fb2b502391a868fbfe0198754" target="_blank">javascript] |
技术栈标签数组,取值受控于 [src/_data/labels.js 中的 tech 枚举 |
标签语义的单一事实来源:region、remote_policy、company_size、technologies 四类值的显示文案全部集中在 src/_data/labels.js。以 NVIDIA 档案为例,region: other 在页面上显示为 "Other",remote_policy: hybrid 显示为 "Hybrid",company_size: enterprise 显示为 "1000+ employees",technologies: <a href="https://link.gitcode.com/i/9fbb9d693e08d6134743e672c17658b8" target="_blank">javascript] 显示为 "JavaScript"。这些映射由 [src/_data/companyHelpers.js 导出给 JS 层(集合分组逻辑)使用,并通过全局数据级联暴露给 Nunjucks 模板,保证前端展示与后端聚合看到同一套标签文案。
三、正文七个小节:内容组织与元描述自动生成
nvidia.md 的正文包含七个 ## 二级标题小节,全部为目录约定结构:
- Company blurb:公司简介——NVIDIA 开创了加速计算(accelerated computing),其 AI 工作正在变革价值 100 万亿美元量级的行业(从游戏到医疗再到交通运输)。该小节是唯一强制内容来源:站点会自动从中提取描述生成 meta description。
- Company size:公司规模——22,473 人(截至 2022 年,档案中注明的数据时点)。
- Remote status:远程状态——阐述了 NVIDIA 对远程办公的技术立场:离开办公室要成功,不能只靠邮件和会议工具,远程员工需要与办公室同等的高性能计算(交互式图形、数据科学、分析与 AI 工作负载),NVIDIA 承诺无论在家还是任何地点都能提供这种算力。
- Region:招聘区域——当前职位面向全球远程开放。
- Company technologies:公司技术——聚焦 Multi-GPU 与 NVIDIA Maximus®(多 GPU 技术,通过多颗专业 GPU 智能扩展应用性能、显著加速工作流)。
- Office locations:办公地点——注册于特拉华州、总部位于加州圣克拉拉(2788 San Tomas Expy, Santa Clara, CA 95051)。
- How to apply:申请方式——指向 NVIDIA 官方 Workday 招聘站。
强制与可选结构:CONTRIBUTING.md 规定正文必须包含 ## Company blurb、## Remote status、## How to apply 三个小节,其余(Company size、Region、Company technologies、Office locations)为常用可选小节。NVIDIA 档案是完整度最高的样本之一,七个小节全部齐备。
描述自动生成:src/companies/companies.11tydata.js 中的计算数据逻辑(eleventyComputed.description)会正则匹配 ## Company blurb 标题之后的文本,清洗掉 Markdown 语法(链接文本、*、`、换行与多余空格)后截断至约 155 字符,并按句号边界智能截断,最终输出为页面 meta description。这意味着只要写好 Company blurb,SEO 描述就自动完成,无需手写。
四、渲染链路:company.njk 布局如何呈现 NVIDIA 档案
公司档案统一由 src/_layouts/company.njk 渲染,其内部逻辑与 NVIDIA 档案的 frontmatter 逐项对应:
- 按钮逻辑:
{% set buttonUrl = careers_url or website %}优先使用careers_url,因此 NVIDIA 档案页面顶部渲染的是 "Apply Now" 主按钮(data-track-outbound追踪外链点击),而非 "Visit Website"。 - 区域与政策标签:
region与remote_policy分别渲染为指向/browse/{region}/、/browse/{remote_policy}/的标签链接,标签文案来自labels.region[region]与labels.remotePolicy[remote_policy]。NVIDIA 对应 "Other" 与 "Hybrid" 两个浏览入口。 - Tech Stack 区块:当
technologies数组非空时,模板遍历生成指向/browse/{tech}/的技术标签。NVIDIA 档案因此会展示一个 "JavaScript" 技术标签,点击可浏览目录中所有使用 JavaScript 的远程友好公司。 - 页脚时间戳:
{% if updatedAt %}条件下以formatDate('MMMM D, YYYY')格式化updatedAt,NVIDIA 档案显示 "Last updated: October 16, 2022"。
模板内的区块样式(.tag--region、.tag--policy、.tag--tech 等)由同一布局文件内嵌的 {%- css "local" -%} 片段定义,无需额外引入 CSS 文件。
五、目录聚合:区域与技术分组的底层逻辑
单个档案渲染之外,nvidia.md 还会通过 src/_config/collections.js 汇入目录的多个聚合视图:
getAllCompanies:全部档案按title字母序排序,NVIDIA 在浏览列表中的排序完全由title: "Nvidia"决定。getCompaniesByRegion:按region字段分组,NVIDIA 归入other组,对应/browse/other/页面。getCompaniesByTech:遍历每家公司technologies数组分组,NVIDIA 因technologies: [javascript]进入 JavaScript 技术组。getCompanyTags:基于集合动态生成公司标签数据(技术 / 区域 / 远程政策三类),NVIDIA 的hybrid、other、javascript都会成为带count的浏览标签条目。
从源码结构可以推断,这些分组数据在构建期由 Eleventy 集合一次性生成,并缓存(_companyCache)以避免对约 850 家公司反复过滤(见 src/_config/collections.js),保证构建性能。
六、链接质量保障:careers_url 的自动化校验
NVIDIA 档案中的 website 与 careers_url 并非只写不管,仓库提供了专门的链接健康检查工具链:
- scripts/check-links.sh:批量提取
src/companies/*.md中 frontmatter 的website/careers_url及正文 URL,用curl -L跟随重定向获取状态码,并行(默认 20 并发、15 秒超时)输出link-check-results.csv,区分 OK / 重定向 / 404 断链 / 403 反爬 / 服务器错误等情形。支持--quick(仅复查上次非 OK 的 URL)与--refresh(重新提取 URL)两种模式。 - scripts/fix-links.mjs:读取 CSV 结果,对可疑响应(403/429/999/连接失败)用浏览器 UA 复验以规避反爬限流,将 URL 分类为 OK / SAFE_REDIRECT / REBRAND / NOT_FOUND / PARKED / THROTTLED,并对同注册域的安全重定向自动生成修复方案;
--plan仅产出计划、--apply应用安全修复、--reverify慢速复验。
因此,维护者可通过 ./check-links.sh --refresh 后运行 node fix-links.mjs --apply 的方式,保证 NVIDIA 这类档案的招聘链接长期有效,避免目录出现死链。详细用法见 scripts/README.md。
七、本地构建与查看
若要在本地复现 NVIDIA 档案在站点上的最终效果,按 README.md 执行即可:
npm install # 安装依赖(需 Node.js 22+)
npm run start # 开发服务器,热重载
npm run build # 生产构建:clean → Eleventy 构建 → pagefind 索引
其中 npm run build 串联了 clean(清理 dist 与生成的样式/脚本)、build:11ty(以 ELEVENTY_ENV=production 执行 Eleventy)与 pagefind(为站点生成全文搜索索引),产物输出到 dist/。构建后可访问 dist/companies/nvidia/ 查看 NVIDIA 档案的完整 HTML 渲染结果。
八、小结
以 NVIDIA 档案 src/companies/nvidia.md 为样本可以看到,Remote In Tech 的公司档案体系是一套高度结构化的数据驱动方案:frontmatter 字段承担机器可读的元数据(区域、远程政策、规模、技术栈),正文小节承担人类可读的内容(简介、远程状态、申请方式),src/_layouts/company.njk 负责渲染,src/_config/collections.js 负责聚合分组,而 scripts/check-links.sh 与 scripts/fix-links.mjs 则守护链接的长期健康。理解这一套链路后,无论是新增公司还是维护现有档案,你都能在 CONTRIBUTING.md 的字段约束下准确完成提交。