envmode
v2.0.2
Published
load multpile dotenv files with expand by ENVMODE | --env.mode.
Downloads
19
Maintainers
Readme
envmode
cli tools to load dotenv with expand by ENVMODE | --env.mode.
准备工作
.env.{mode} example
./project
├── envmode
│ ├── .env
│ ├── .env.1
│ ├── .env.2
│ └── config.js
├── package.json
├── test.js
└── test2.lock
使用
npm install envmode
# or
yarn add envmode
之后
{
"scripts": {
"testall": "npm run badcross && npm run okcross && npm run test1 && npm run test2 && npm run test3",
"badcross": "ENVMODE=1 envmode node test.js && node test2.js",
"okcross": "ENVMODE=1 envmode npm run mulcli",
"mulcli": "node test.js && node test2.js",
"test1": "ENVMODE=1 envmode node test.js",
"test2": "envmode --env.mode=2 node test.js",
"test3": "ENVMODE=1 envmode --env.mode=2 node test.js"
}
}
文件生成
// envmode/config.js
/**
type TConfig = {
genConfig: {
genEnvJsFilePaths?: string | string[]
genEnvTsFilePaths?: string | string[]
genEnvDefinesFilePaths?: string | string[]
genProcessTypeDefinesPaths?: string | string[]
}
}
*/
const path = require('path');
const cwd = (file) => path.resolve(process.cwd(), file);
module.exports = {
genConfig: {
genEnvJsFilePaths: cwd('./env.js'),
genEnvDefinesFilePaths: cwd('./defines.js'),
genEnvTsFilePaths: [cwd('./web/ENV.ts'), cwd('./src/ENV.ts')],
genProcessTypeDefinesPaths: cwd('./typings/process.d.ts'),
},
};
expand 规则
# 在 process.env 中已经存在的值,
# 会被替换为 process.env.VAR_EXIST_IN_PROCESS_ENV 的值
# 相当于copy了一下 process.env 的值
# 多用于生成 ENV.ts 使用
VAR_EXIST_IN_PROCESS_ENV=${VAR_EXIST_IN_PROCESS_ENV}
VAR_EXIST_IN_PROCESS_ENV=$VAR_EXIST_IN_PROCESS_ENV
# 在 process.env 中不存在!!!的值
# 会被替换为 '', 这是跟 dotenv-expand 区别的地方
# 在 dotenv-expand 中, 会 递归 maxsize error
VAR_NOT_EXIST_IN_PROCESS_ENV=${VAR_NOT_EXIST_IN_PROCESS_ENV}
VAR_NOT_EXIST_IN_PROCESS_ENV=$VAR_NOT_EXIST_IN_PROCESS_ENV
规则
- .env 为默认变量表
- 指定 --env.mode=[mode] 之后如果存在 .env.[mode] 那么会进行 merge, 最终结果为 .env + .env.{mode}, merge 逻辑为同名覆盖
- 优先级 ENVMODE > --env.mode
- 后面如果有 && | & 连接的命令, 参考上面
okcross
使用 npm 进行一次包装, thanks to @JserWang
debug
if (
process.env.NODE_ENV === 'development' ||
process.env.ENVMODE_DEBUG !== undefined
) {
console.log(
'[envmode]-------------最终注入 process.env 环境变量---------------',
);
console.log(expandEnv);
}
inspired
by vite and powered by motdotla/dotenv