← 全部文章

教程

DEV/STAGING/PROD 环境标记 —— 不再搞砸生产环境的 5 种方法

你点了「删除所有账户」,以为自己在 staging。结果是生产环境。每个 DevOps 和工程师至少都会遇上一次。五种环境视觉标记技巧,让你别再掉进那个坑。

方法 1 —— 顶部红色横幅

最显而易见,也最有效。每个页面顶部一条横幅,无法忽视:

body::before {
  content: "DEV 环境 —— 数据可能并非来自生产";
  position: fixed;
  top: 0; left: 0; right: 0;
  background: repeating-linear-gradient(
    -45deg, #dc2626, #dc2626 12px, #b91c1c 12px, #b91c1c 24px
  );
  color: #fff;
  text-align: center;
  padding: 6px 12px;
  font: 700 13px/1.4 ui-monospace, monospace;
  letter-spacing: .5px;
  z-index: 999999;
  text-shadow: 0 1px 2px rgba(0,0,0,.3);
}

/* 给 body 加内边距,让内容不会滑到横幅下面 */
body { padding-top: 32px !important; }

重复渐变营造出工地上那种「警示胶带」的图案 —— 从进化的角度说,它意味着危险。没有渐变它就是一条普通的信息栏;有了它,没人会忽视它。

方法 2 —— 角落里的悬浮徽章

顶部横幅咄咄逼人,还占空间。有时你想要更含蓄的东西 —— 一个小巧的角落徽章:

body::after {
  content: "DEV";
  position: fixed;
  bottom: 16px; left: 16px;
  background: #dc2626;
  color: #fff;
  padding: 6px 12px;
  border-radius: 8px;
  font: 700 12px ui-monospace, monospace;
  letter-spacing: 1px;
  z-index: 999999;
  box-shadow: 0 4px 12px rgba(220, 38, 38, .4);
  pointer-events: none; /* 不要阻挡点击 */
}

固定在角落,可见但低调。pointer-events: none 很关键 —— 没有它,徽章会挡住下面的按钮。

方法 3 —— 替换 favicon

横幅只有在你看着页面时才有用。浏览器标签页即使 Cmd+Tab 之后也能看到。替换 favicon:

// 生成一个新 favicon(带字母 D 的红色圆圈)
const canvas = document.createElement('canvas');
canvas.width = 32; canvas.height = 32;
const ctx = canvas.getContext('2d');
ctx.fillStyle = '#dc2626';
ctx.beginPath();
ctx.arc(16, 16, 14, 0, Math.PI * 2);
ctx.fill();
ctx.fillStyle = '#fff';
ctx.font = 'bold 18px sans-serif';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText('D', 16, 17);

// 移除旧的 favicon
document.querySelectorAll('link[rel*="icon"]').forEach(el => el.remove());

// 添加新的
const link = document.createElement('link');
link.rel = 'icon';
link.type = 'image/png';
link.href = canvas.toDataURL();
document.head.appendChild(link);

标签页里一个红色的 D,永远可见。书签里也管用 —— staging 和生产的书签变得轻而易举就能区分。

方法 4 —— 细微的视口染色

最优雅的 —— 一层轻微的彩色叠层,给整个页面带上一抹几乎察觉不到的色调:

/* STAGING 用橙色调,DEV 用红色调 */
html::before {
  content: '';
  position: fixed;
  inset: 0;
  background: rgba(245, 158, 11, .04);
  pointer-events: none;
  z-index: 999998;
  mix-blend-mode: multiply;
}

rgba(..., .04) = 几乎不可见,但几秒之后大脑就知道「有什么不一样」。几天之后你一眼就能察觉。没有横幅那种侵略性。

方法 5 —— 在标签页标题里加前缀

浏览器标签页显示 document.title。加个前缀:

// 标题前缀 + 留意会动态修改它的 SPA
const PREFIX = '[DEV] ';

function ensurePrefix() {
  if (!document.title.startsWith(PREFIX)) {
    document.title = PREFIX + document.title;
  }
}

ensurePrefix();

// SPA 经常在路由切换时修改标题
new MutationObserver(ensurePrefix)
  .observe(document.querySelector('title'), { childList: true });

MutationObserver 会捕获那些在路由切换时重写标题的 SPA。没有这个 observer,前缀在第一次导航后就消失了。

如何在 JustZix 中接入

  1. 安装 JustZix
  2. 文件夹「环境标记」。按环境设规则:
    • 模式 https://*-staging.company.com/* → 方法 1(横幅)+ 方法 3(favicon)。
    • 模式 http://localhost:*/* → 方法 2(徽章)+ 方法 5(标题前缀)。
  3. 给整个团队发分享链接 —— 大家都用同一套环境标记。

免费安装 JustZix,别再因为「手滑点错」而搞砸生产环境。

为这篇文章评分

暂无评分 — 成为第一个。

自己动手试试

安装 JustZix,粘贴本文中的任意代码片段。两分钟,从零到一条在你所有设备上生效的规则。

获取 JustZix

功能 · 工作原理 · 示例 · 应用场景