用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/saleor/apps --skill add-environment-variable命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Styling and layout guide for Saleor Apps using modern macaw-ui and @saleor/apps-ui-next. Use when creating, refactoring, or modifying React components in apps or packages/ui-next — especially layout, spacing, colors, borders, setup checklists, or settings cards. Triggers on component creation, UI refactors, and style-related tasks in the apps monorepo.
Scaffold a new shared package in the saleor-apps monorepo under ./packages/. Use when asked to "create a package", "add a new package", "scaffold a package", "new shared library", or any task that involves creating a new reusable package in the saleor-apps monorepo. Handles all boilerplate - package.json, tsconfig, eslint, vitest, turbo, lint-staged configs, and src/index.ts.
基于 SOC 职业分类
正在显示 SKILL.md
| name | Add Environment Variable |
| description | Use when adding a new environment variable to an app. |
When adding a new environment variable to an app, follow these steps:
Find the env.ts or env.mjs file in the app that uses @t3-oss/env-nextjs. Common locations:
apps/<app-name>/src/env.tsapps/<app-name>/src/lib/env.tsThe createEnv function has three sections:
client: For variables prefixed with NEXT_PUBLIC_ (exposed to browser)server: For server-only variables (secrets, API keys, configuration)shared: For variables used in both client and server (like NODE_ENV)Use appropriate Zod schemas with validation:
// Required string
MY_VAR: z.string(),
// Optional string
MY_VAR: z.string().optional(),
// String with default value (preferred over defaults elsewhere in code)
MY_VAR: z.string().optional().default("default-value"),
// Number (use z.coerce for env vars)
MY_VAR: z.coerce.number().optional().default(5000),
// Enum
MY_VAR: z.enum(["option1", "option2"]).optional().default("option1"),
// Boolean (use the booleanSchema helper already defined in the file)
MY_VAR: booleanSchema.optional().default("false"),
// Positive number with constraints
MY_VAR: z.coerce.number().positive().optional().default(14),
// Comma-separated list transformed to array
MY_VAR: z
.string()
.optional()
.transform((s) => {
if (!s) return [];
return s.split(",").map((item) => item.trim());
}),
Add a JSDoc-style comment above the variable explaining its purpose:
server: {
// Timeout in milliseconds for Algolia API requests
ALGOLIA_TIMEOUT_MS: z.coerce.number().optional().default(5000),
// Number of items to process in a single batch during Strapi sync
STRAPI_BATCH_SIZE: z.coerce.number().optional().default(50),
}
Every variable must also be added to the runtimeEnv object:
runtimeEnv: {
// ... existing vars
MY_VAR: process.env.MY_VAR,
}
Always define default values in the env.ts file, not in the consuming code.
Bad:
// In env.ts
MY_TIMEOUT: z.coerce.number().optional(),
// In some-service.ts
const timeout = env.MY_TIMEOUT ?? 5000; // DON'T DO THIS
Good:
// In env.ts
// Timeout for external API calls in milliseconds
MY_TIMEOUT: z.coerce.number().optional().default(5000),
// In some-service.ts
const timeout = env.MY_TIMEOUT; // Already has the default
If the app has a .env.example file, add the new variable there with a placeholder or example value.
Adding MY_SERVICE_TIMEOUT_MS to the CMS app:
// In apps/cms/src/env.ts
export const env = createEnv({
server: {
// ... existing vars
// Timeout in milliseconds for My Service API calls
MY_SERVICE_TIMEOUT_MS: z.coerce.number().optional().default(10_000),
},
runtimeEnv: {
// ... existing vars
MY_SERVICE_TIMEOUT_MS: process.env.MY_SERVICE_TIMEOUT_MS,
},
});
Usage in code:
import { env } from "@/env";
const client = new MyServiceClient({
timeout: env.MY_SERVICE_TIMEOUT_MS,
});