robot-admin-env-manager
v1.1.0
Published
ð Robot Admin ç¯å¢é 眮管çå·¥å · - æºèœç¯å¢åæ¢ïŒé¿å èæ¬æä»¶è¢«è¯¯ä¿®æ¹
Maintainers
Readme
ð robot-admin-env-manager
äžäžºç°ä»£å端项ç®è®Ÿè®¡çç¯å¢é 眮管çå·¥å · | åå«ç¯å¢åéæ··ä¹±ïŒæ¥æ±äŒé åŒåäœéª
English | äžæ
ð« äœ æ¯åŠéå°è¿è¿äºé®é¢ïŒ
- åŒåæ¶è¿éæ°æ®åºïŒ å 䞺
.envæä»¶å¿è®°åæ¢ç¯å¢ - éšçœ²åºéïŒ æµè¯ç¯å¢çé 眮æå€æšå°äºç产ç¯å¢
- å¢éåäœå°éŸïŒ æ¯äžªäººçç¯å¢é 眮æä»¶éœäžäžæ ·
- é 眮æä»¶è¢«è¯¯å ïŒ éèŠçç¯å¢åéæŸäžåæ¥äº
- å€ç¯å¢ç®¡çæ··ä¹±ïŒ devãtestãstagingãprod é 眮å°å€éœæ¯
åŠæäœ ç¹å€ŽäºïŒé£ä¹è¿äžªå·¥å ·å°±æ¯äžºäœ èççïŒ ð¯
⚠䞺ä»ä¹éæ© env-managerïŒ
ðš 粟çŸçåœä»€è¡çé¢
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Robot Admin â ç¯å¢é
眮管çå·¥å
· v2.1.3
â åŒå§å€ç â production ç¯å¢
â éçšé
眮 â 读åæå
â ç¯å¢é
眮 â 读åæå
â åå¹¶é
眮 â 已宿
â åå
¥æä»¶ â 已宿
â ç¯å¢åæ¢æå â PRODUCTION ⢠12 䞪åé ⢠已çæ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââð¡ïž å®å šå¯é
- â é¶è¯¯æäœ - æºèœéªè¯ïŒé²æ¢é 眮é误
- â 粟èŽçé¢ - ç»äžçèŸåºå讟计ïŒä¿¡æ¯æž æ°å¯è¯»
- â æéæ£æ¥ - ç¡®ä¿æè¶³å€æéè¿è¡æä»¶æäœ
- â æ ŒåŒéªè¯ - èªå𿣿¥ç¯å¢åéæ ŒåŒ
ð åŒåäœéªæäœ³
- â
äžé®åæ¢ -
env-manager devç§é忢å°åŒåç¯å¢ - â æºèœåå¹¶ - èªåšåå¹¶éçšé 眮åç¯å¢ç¹å®é 眮
- â é¶åŠä¹ ææ¬ - ç®åçŽè§ïŒçäžçŒå°±äŒçš
- â å€å¹³å°æ¯æ - WindowsãmacOSãLinux éçš
ð¡ ç°ä»£å讟计
- â 粟èŽçé¢ - 䜿çšç°ä»£ååŸæ åé¢è²ç³»ç»
- â é¶äŸèµ - åªäœ¿çš Node.js å 眮暡åïŒå¯åšé£å¿«
- â CommonJS & ESM å奜 - æ¯æ require / import 䞀ç§çšæ³
- â çå®çæ¬ - åšæè¯»å package.json çæ¬å·
ðŠ å®è£
å šå±å®è£ ïŒæšèïŒ
npm install -g robot-admin-env-manager项ç®å å®è£
npm install --save-dev robot-admin-env-managerð å¿«éåŒå§
1ïžâ£ åå§å项ç®
# åšäœ çé¡¹ç®æ ¹ç®åœè¿è¡
env-manager --initæ§è¡åäœ äŒçå°ïŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Robot Admin â ç¯å¢é
眮管çå·¥å
· v2.1.3
â åå§åé¡¹ç® â åŒå§å€ç
â .env â å建æå
â .env.development â å建æå
â .env.test â å建æå
â .env.staging â å建æå
â .env.production â å建æå
å¿«é䜿çš:
env-manager dev â åŒåç¯å¢
env-manager prod â ç产ç¯å¢
env-manager --scan â æ«ææä»¶
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââè¿äŒåå»ºä»¥äžæä»¶ç»æïŒ
your-project/
âââ envs/
â âââ .env # ð§ éçšé
眮
â âââ .env.development # ð¥ åŒåç¯å¢
â âââ .env.test # 𧪠æµè¯ç¯å¢
â âââ .env.staging # ð é¢ååžç¯å¢
â âââ .env.production # ð ç产ç¯å¢
âââ .env # â¡ åœåæ¿æŽ»çç¯å¢é
眮2ïžâ£ é çœ®äœ çç¯å¢æä»¶
envs/.envïŒéçšé 眮ïŒ
# ææç¯å¢å
±äº«çé
眮
APP_NAME=æçè¶
èµé¡¹ç®
APP_VERSION=1.0.0
DATABASE_TIMEOUT=30000
UPLOAD_MAX_SIZE=10485760envs/.env.developmentïŒåŒåç¯å¢ïŒ
# åŒåç¯å¢ç¹å®é
眮
NODE_ENV=development
API_URL=http://localhost:3000
DATABASE_URL=mongodb://localhost:27017/myapp_dev
DEBUG=true
MOCK_DATA=trueenvs/.env.productionïŒç产ç¯å¢ïŒ
# ç产ç¯å¢ç¹å®é
眮
NODE_ENV=production
API_URL=https://api.myapp.com
DATABASE_URL=mongodb://prod-cluster:27017/myapp
DEBUG=false
ENABLE_ANALYTICS=true3ïžâ£ äžé®åæ¢ç¯å¢
# 忢å°åŒåç¯å¢
env-manager dev
# 忢å°ç产ç¯å¢
env-manager prod
# 忢尿µè¯ç¯å¢
env-manager test
# æ¥çææå¯çšç¯å¢
env-manager --scanæ«æç¯å¢æä»¶çèŸåºç€ºäŸïŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Robot Admin â ç¯å¢é
眮管çå·¥å
· v2.1.3
åç°ç¯å¢æä»¶:
â .env â 0.2KB
â .env.development â 0.3KB
â .env.test â 0.2KB
â .env.staging â 0.3KB
â .env.production â 0.4KB
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââð¡ 䜿çšåºæ¯
ð¥ åºæ¯äžïŒæ¥åžžåŒå
# æ©äžåŒå§åŒå
env-manager dev
npm run start
# éèŠæµè¯æ¶
env-manager test
npm run test
# åå€éšçœ²
env-manager prod
npm run buildð åºæ¯äºïŒCI/CD éæ
# GitHub Actions
- name: Setup Environment
run: |
npm install -g robot-admin-env-manager
env-manager production
npm run build
# Docker éšçœ²
FROM node:18-alpine
RUN npm install -g robot-admin-env-manager
COPY envs/ ./envs/
RUN env-manager productionð¥ åºæ¯äžïŒå¢éåäœ
# æ°åäºå
¥è
git clone your-project
cd your-project
npm install
env-manager --init # å建ç¯å¢æä»¶æš¡æ¿
env-manager dev # äžé®é
眮åŒåç¯å¢
npm run dev # åŒå§åŒåïŒç¯å¢å·²å°±ç»ªïŒð§ åºæ¯åïŒå€é¡¹ç®ç®¡ç
# 项ç®A - çµåå¹³å°
cd project-a
env-manager prod # 忢å°ç产ç¯å¢
npm run deploy
# 项ç®B - 管çåå°
cd ../project-b
env-manager staging # 忢å°é¢ååžç¯å¢
npm run testð å®æŽ API ææ¡£
ð¥ïž åœä»€è¡æ¥å£
åºç¡åœä»€
env-manager <environment> # 忢尿å®ç¯å¢
env-manager --init # åå§å项ç®ç¯å¢æä»¶
env-manager --scan # æ«æå¯çšçç¯å¢æä»¶
env-manager --help # æŸç€ºåž®å©ä¿¡æ¯
env-manager --version # æŸç€ºçæ¬å·æ¯æçç¯å¢ç±»å
| ç¯å¢åç§° | å«å | å¯¹åºæä»¶ | 䜿çšåºæ¯ |
|---------|-----|----------|----------|
| dev | development, local | .env.development | ð¥ æ¬å°åŒå |
| test | - | .env.test | 𧪠èªåšåæµè¯ |
| staging | stage, uat | .env.staging | ð é¢ååžéªè¯ |
| prod | production | .env.production | ð ç产ç¯å¢ |
é«çº§é项
env-manager prod --backup # 忢åå€ä»œåœå .env 䞺 .env.backup
env-manager prod --dry-run # é¢è§åå¹¶ç»æïŒäžå®é
åå
¥æä»¶
env-manager dev --envsDir=config/envs # èªå®ä¹ç¯å¢æä»¶ç®åœ
env-manager dev --target=.env.local # èªå®ä¹èŸåºæä»¶è·¯åŸ
env-manager --init --force # 区å¶éæ°åå§åïŒèŠçå·²ææä»¶ïŒ
env-manager --scan --envsDir=config # æ«æèªå®ä¹ç®åœð çŒçšåŒ API
ES6 æš¡å
import { switchEnv, scanEnvs, initProject } from 'robot-admin-env-manager'
// 忢ç¯å¢
await switchEnv('production', {
envsDir: 'config/envs', // èªå®ä¹ç¯å¢æä»¶ç®åœ
targetFile: '.env.local', // èªå®ä¹èŸåºæä»¶
backup: true, // 忢åå€ä»œåœå .env
dryRun: false, // æ¯åŠä»
é¢è§
silent: false // æ¯åŠé黿š¡åŒ
})
// æ«æç¯å¢æä»¶
const envFiles = await scanEnvs({ envsDir: 'envs' })
console.log('æŸå°ç¯å¢æä»¶:', envFiles)
// åå§å项ç®
await initProject({
envsDir: 'envs',
force: false
})CommonJS
const { switchEnv, scanEnvs, initProject } = require('robot-admin-env-manager')
// åš Express åºçšäžäœ¿çš
app.post('/api/switch-env', async (req, res) => {
try {
const { environment } = req.body
const result = await switchEnv(environment)
res.json({ success: true, result })
} catch (error) {
res.status(500).json({ error: error.message })
}
})类暡åŒïŒååå Œå®¹ïŒ
const EnvManager = require('robot-admin-env-manager')
const manager = new EnvManager({
envsDir: 'custom-envs',
targetFile: '.env.local',
silent: true
})
await manager.switchEnvironment('production')
await manager.scanEnvironmentFiles()
await manager.initializeProject()ð§ é 眮æä»¶è¯Šè§£
ðïž ç®åœç»æ
your-project/
âââ envs/ # ç¯å¢é
眮ç®åœ
â âââ .env # éçšé
çœ®ïŒææç¯å¢å
±äº«ïŒ
â âââ .env.development # åŒåç¯å¢é
眮
â âââ .env.test # æµè¯ç¯å¢é
眮
â âââ .env.staging # é¢ååžç¯å¢é
眮
â âââ .env.production # ç产ç¯å¢é
眮
âââ .env # åœåæ¿æŽ»çç¯å¢é
眮ïŒèªåšçæïŒ
âââ .gitignore # ç¡®ä¿ .env 被応ç¥ð é 眮åå¹¶è§å
env-manager äŒæºèœåå¹¶é 眮æä»¶ïŒ
- äŒå 级: ç¯å¢ç¹å®é 眮 > éçšé 眮
- åå¹¶çç¥:
- åŠæåéåšç¯å¢ç¹å®æä»¶äžååšïŒäœ¿çšç¯å¢ç¹å®çåŒ
- åŠæåéåªåšéçšæä»¶äžååšïŒäœ¿çšéçšçåŒ
- èªåšæ·»å æ³šé诎æå鿥æº
瀺äŸåå¹¶ç»æïŒ
# âš èªåšçæçç¯å¢é
眮æä»¶
# ð ç± robot-admin-env-manager çæ (development ç¯å¢)
# â ïž è¯·å¿æåšçŒèŸæ€æä»¶
# ð æåæŽæ°: 2024-01-15 10:30:25
# âââââââââââââââ ç¯å¢ç¹å®é
眮 âââââââââââââââ
NODE_ENV=development
API_URL=http://localhost:3000
DEBUG=true
# âââââââââââââââ éçšé
眮 âââââââââââââââ
APP_NAME=æçè¶
èµé¡¹ç®
APP_VERSION=1.0.0
# DATABASE_URL=mongodb://prod:27017/app # (被ç¯å¢ç¹å®é
眮èŠç)ð æäœ³å®è·µ
â æšèåæ³
# envs/.env - éçšé
眮
APP_NAME=MyApp
APP_VERSION=1.0.0
DEFAULT_LOCALE=zh-CN
TIMEZONE=Asia/Shanghai
# envs/.env.development - åŒåç¯å¢
NODE_ENV=development
API_URL=http://localhost:3000
DEBUG=true
LOG_LEVEL=debug
# envs/.env.production - ç产ç¯å¢
NODE_ENV=production
API_URL=https://api.myapp.com
DEBUG=false
LOG_LEVEL=errorâ é¿å çåæ³
# äžèŠåšéçšé
çœ®äžæŸç¯å¢ç¹å®çåŒ
API_URL=http://localhost:3000 # â è¿æ¯åŒåç¯å¢ç¹å®ç
# äžèŠåšç¯å¢æä»¶äžéå€éçšé
眮
APP_NAME=MyApp # â è¿åºè¯¥åšéçšé
眮äžðš çé¢è®Ÿè®¡ç¹è²
ð ç°ä»£åé¢è²ç³»ç»
- äž»è²è°: ç°ä»£è玫è²ç³»ïŒäžäžäžäžå€±æŽ»å
- ç¶æé¢è²: æåïŒç»¿âïŒãèŠåïŒé»â ïŒãé误ïŒçº¢âïŒãä¿¡æ¯ïŒèâïŒ
- 粟èŽåŸæ : äœ¿çš Unicode 笊å·ïŒæ éé¢å€åäœ
ð ç»äžèŸåºæ ŒåŒ
æææäœéœäœ¿çšç»äžçèŸåºåæ ŒåŒïŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Robot Admin â ç¯å¢é
眮管çå·¥å
· v2.1.3
[åŸæ ] æäœæè¿° â 诊ç»ä¿¡æ¯
â æç»ç»æ â å
³é®ä¿¡æ¯ ⢠ç»è®¡æ°æ® â¢ ç¶æ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââð¯ æž æ°çä¿¡æ¯å±çº§
- åçæ è¯: â + å·¥å ·åç§° + çæ¬å·
- å€çè¿çš: 垊ç®å€Žçæž æ°æ¥éª€
- æç»ç»æ: çªåºçæåå¡ç讟计
- æå对éœ: ææææ¬éœç²Ÿç¡®å¯¹éœ
ð ïž é¡¹ç®éæ
ðŠ åš package.json äžéæ
{
"scripts": {
"env:dev": "env-manager dev",
"env:test": "env-manager test",
"env:staging": "env-manager staging",
"env:prod": "env-manager prod",
"dev": "env-manager dev && npm run start:dev",
"test": "env-manager test && npm run test:unit",
"build:staging": "env-manager staging && npm run build",
"build:prod": "env-manager prod && npm run build",
"deploy:staging": "npm run build:staging && npm run deploy",
"deploy:prod": "npm run build:prod && npm run deploy"
}
}ð³ Docker éæ
FROM node:18-alpine
# å®è£
env-manager
RUN npm install -g robot-admin-env-manager
# å€å¶ç¯å¢é
眮
COPY envs/ ./envs/
# æ ¹æ®æå»ºåæ°è®Ÿçœ®ç¯å¢
ARG NODE_ENV=production
RUN env-manager ${NODE_ENV}
# æå»ºåºçš
COPY . .
RUN npm ci && npm run build
CMD ["npm", "start"]âïž GitHub Actions éæ
name: Build and Deploy
on:
push:
branches: [main, develop]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Setup environment
run: |
npm install -g robot-admin-env-manager
env-manager ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}
- name: Build
run: npm run build
- name: Deploy
run: npm run deployð§ Webpack/Vite éæ
// webpack.config.js
const path = require('path')
module.exports = {
// Webpack äŒèªåšè¯»å .env æä»¶
plugins: [
new webpack.DefinePlugin({
'process.env': JSON.stringify(process.env)
})
]
}
// vite.config.js
import { defineConfig, loadEnv } from 'vite'
export default defineConfig(({ mode }) => {
// env-manager çæç .env æä»¶äŒè¢«èªåšå 蜜
const env = loadEnv(mode, process.cwd(), '')
return {
define: {
__APP_ENV__: JSON.stringify(env.NODE_ENV)
}
}
})ð å®å šæäœ³å®è·µ
ð¡ïž æä»¶æé管ç
# .gitignore é
眮
.env
.env.local
.env.*.local
# äœèŠä¿çç¯å¢æä»¶æš¡æ¿
!envs/.env.example
!envs/.env.development.exampleð ææä¿¡æ¯å€ç
# envs/.env.production
# 䜿çšç¯å¢åéæå¯é¥ç®¡çæå¡
DATABASE_URL=${DATABASE_URL}
API_SECRET=${API_SECRET}
JWT_SECRET=${JWT_SECRET}
# æäœ¿çšå äœç¬ŠïŒéšçœ²æ¶æ¿æ¢
DATABASE_URL=__DATABASE_URL__
API_SECRET=__API_SECRET__ðš åžžè§é®é¢
A: è¯·æ£æ¥ä»¥äžå ç¹ïŒ
- ç¡®ä¿å·²è¿è¡
env-manager <environment>忢ç¯å¢ - æ£æ¥åºçšæ¯åŠæ£ç¡®å èœœäº .env æä»¶
- 确讀ç¯å¢åéåç§°æ ŒåŒæ£ç¡®ïŒåæ¯ãæ°åãäžå线ïŒ
- éå¯äœ çåºçšæå¡
# éªè¯ç¯å¢æä»¶
env-manager --scan
cat .enväœ åºè¯¥çå°ç±»äŒŒè¿æ ·çèŸåºïŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Robot Admin â ç¯å¢é
眮管çå·¥å
· v2.1.3
åç°ç¯å¢æä»¶:
â .env â 0.2KB
â .env.development â 0.3KB
â .env.test â 0.2KB
â .env.staging â 0.3KB
â .env.production â 0.4KB
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââA: æšèçåæ³ïŒ
- å°
envs/ç®åœæäº€å° Git - åš
.gitignoreäžæé€.envæä»¶ - å¢éæåå
é代ç åè¿è¡
env-manager --init - æ ¹æ®éèŠä¿®æ¹
envs/äžçé 眮æä»¶
# å¢éæåçæäœæµçš
git clone your-project
cd your-project
npm install
env-manager --init
env-manager devA: åœç¶å¯ä»¥ïŒæ¯æå€ç§èªå®ä¹æ¹åŒïŒ
# çŒçšåŒæ¹åŒ
const { switchEnv } = require('robot-admin-env-manager')
await switchEnv('dev', { envsDir: 'config/environments' })A: 粟èŽçé¢è®Ÿè®¡åžŠæ¥ç奜å€ïŒ
- è§è§å®æŽæ§: ç»äžçèŸåºåïŒæ¯äžªæäœéœææç¡®èŸ¹ç
- ä¿¡æ¯æž æ°: 䜿çšåŸæ åé¢è²åºåäžåç¶æ
- ç°ä»£åäœéª: 笊åç°ä»£ CLI å·¥å ·ç讟计ç念
- æäºé 读: 粟确对éœçææ¬ïŒæé«å¯è¯»æ§
- äžäžæ: ç»åŒåå¢éåžŠæ¥æŽå¥œçå·¥å ·äœ¿çšäœéª
ð€ èŽ¡ç®æå
æä»¬æ¬¢è¿ææåœ¢åŒç莡ç®ïŒ
ð æ¥å Bug
åš GitHub Issues äžæ¥åé®é¢æ¶ïŒè¯·å å«ïŒ
- æäœç³»ç»å Node.js çæ¬
- 宿Žçé误信æ¯
- éç°æ¥éª€
- ææçè¡äžº
ð¡ åèœå»ºè®®
æä»¬åžæå¬å°äœ çæ³æ³ïŒè¯·åš Issues äžæè¿°ïŒ
- åèœç䜿çšåºæ¯
- å ·äœçå®ç°å»ºè®®
- çžå ³çææ¯ç»è
ð§ 代ç 莡ç®
# 1. Fork 项ç®
git clone https://github.com/your-username/robot-admin-env-manager.git
# 2. å建åèœåæ¯
git checkout -b feature/amazing-feature
# 3. æäº€æ¹åš
git commit -m "feat: add amazing feature"
# 4. æšé忝
git push origin feature/amazing-feature
# 5. å建 Pull Requestð æäº€è§è
æä»¬äœ¿çš Conventional CommitsïŒ
feat:æ°åèœfix:Bug ä¿®å€docs:ææ¡£æŽæ°style:ä»£ç æ ŒåŒè°æŽrefactor:代ç éætest:æµè¯çžå ³chore:æå»ºå·¥å ·ãäŸèµæŽæ°ç
ð 项ç®ç»è®¡
- ð å¯åšæ¶éŽ: < 100ms
- ðŠ å 倧å°: < 50KB
- ð§ é¶å€éšäŸèµ
- 𧪠æµè¯èŠçç: 95%+
- ð æ¯æå¹³å°: Windows, macOS, Linux
- ðïž æ¯æè¿è¡æ¶: Node.js 14+, Bun, Deno
- ðš ç°ä»£åCLIçé¢: 粟èŽçèŸåºå讟计
ð èŽè°¢
æè°¢ææäžºè¿äžªé¡¹ç®ååºèŽ¡ç®çåŒåè 们ïŒ
ç¹å«æè°¢ïŒ
- dotenv - å¯åäºç¯å¢åé管ççæäœ³å®è·µ
- chalk - åœä»€è¡é¢è²èŸåºççµææ¥æº
- commander - åœä»€è¡è§£æç讟计åè
- Vercel CLI - ç°ä»£åCLIçé¢è®Ÿè®¡ççµææ¥æº
ð 讞å¯è¯
MIT © Robot Admin Team
åŠæè¿äžªå·¥å ·å¯¹äœ æåž®å©ïŒè¯·ç»æäžäžª âïž
ð æ¥åé®é¢ ⢠ð¡ åèœå»ºè®® ⢠ð¬ 讚论亀æµ
让ç¯å¢ç®¡çååŸç®åäŒé ð
