feat: 更新环境
This commit is contained in:
parent
213219518f
commit
0cc5c0f98e
2
.gitignore
vendored
2
.gitignore
vendored
@ -5,3 +5,5 @@ dist
|
|||||||
|
|
||||||
app.config.json5
|
app.config.json5
|
||||||
|
|
||||||
|
|
||||||
|
.env
|
||||||
|
@ -11,6 +11,6 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@kevisual/user-config": "link:.."
|
"@kevisual/use-config": "link:.."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
9
demo/src/env.ts
Normal file
9
demo/src/env.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import fs from 'fs';
|
||||||
|
import { useConfig, useKey } from '@kevisual/use-config/env';
|
||||||
|
const config = useConfig();
|
||||||
|
|
||||||
|
console.log(config);
|
||||||
|
|
||||||
|
const a = useKey('a');
|
||||||
|
|
||||||
|
console.log(a);
|
@ -1,4 +1,4 @@
|
|||||||
import { useConfig } from '@kevisual/user-config';
|
import { useConfig } from '@kevisual/use-config';
|
||||||
|
|
||||||
// console.log(useConfig);
|
// console.log(useConfig);
|
||||||
console.log(useConfig());
|
console.log(useConfig());
|
||||||
|
34
demo/tsconfig.json
Normal file
34
demo/tsconfig.json
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "NodeNext",
|
||||||
|
"target": "esnext",
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"outDir": "./dist",
|
||||||
|
"sourceMap": false,
|
||||||
|
"allowJs": true,
|
||||||
|
"newLine": "LF",
|
||||||
|
"baseUrl": "./",
|
||||||
|
"typeRoots": [
|
||||||
|
"node_modules/@types",
|
||||||
|
],
|
||||||
|
"declaration": false,
|
||||||
|
"noEmit": true,
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"emitDecoratorMetadata": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"paths": {
|
||||||
|
"@/*": [
|
||||||
|
"src/*"
|
||||||
|
],
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"rollup.config.js",
|
||||||
|
]
|
||||||
|
}
|
31
package.json
31
package.json
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "@kevisual/use-config",
|
"name": "@kevisual/use-config",
|
||||||
"version": "1.0.9",
|
"version": "1.0.10",
|
||||||
"types": "dist/config.d.ts",
|
"types": "dist/config.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npm run clean && rollup -c",
|
"build": "npm run clean && tsup",
|
||||||
"watch": " rollup -c -w",
|
"watch": "tsup --watch",
|
||||||
"clean": "rimraf dist"
|
"clean": "rimraf dist"
|
||||||
},
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
@ -20,24 +20,12 @@
|
|||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-alias": "^5.1.1",
|
|
||||||
"@rollup/plugin-commonjs": "^28.0.2",
|
|
||||||
"@rollup/plugin-json": "^6.1.0",
|
|
||||||
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
||||||
"@rollup/plugin-replace": "^6.0.2",
|
|
||||||
"@rollup/plugin-typescript": "^12.1.2",
|
|
||||||
"@types/node": "^22.13.5",
|
"@types/node": "^22.13.5",
|
||||||
"chalk": "^5.4.1",
|
"dotenv": "^16.4.7",
|
||||||
"commander": "^13.1.0",
|
"fast-glob": "^3.3.2",
|
||||||
"glob": "^11.0.1",
|
|
||||||
"json-schema-to-ts": "^3.1.1",
|
"json-schema-to-ts": "^3.1.1",
|
||||||
"json5": "^2.2.3",
|
"json5": "^2.2.3",
|
||||||
"rollup": "^4.34.8",
|
"tsup": "^8.4.0",
|
||||||
"rollup-plugin-copy": "^3.5.0",
|
|
||||||
"rollup-plugin-dts": "^6.1.1",
|
|
||||||
"rollup-plugin-esbuild": "^6.2.0",
|
|
||||||
"rollup-plugin-inject": "^3.0.2",
|
|
||||||
"tslib": "^2.8.1",
|
|
||||||
"typescript": "^5.7.3"
|
"typescript": "^5.7.3"
|
||||||
},
|
},
|
||||||
"exports": {
|
"exports": {
|
||||||
@ -45,6 +33,10 @@
|
|||||||
"import": "./dist/config.mjs",
|
"import": "./dist/config.mjs",
|
||||||
"types": "./dist/config.d.ts"
|
"types": "./dist/config.d.ts"
|
||||||
},
|
},
|
||||||
|
"./env": {
|
||||||
|
"import": "./dist/env.mjs",
|
||||||
|
"types": "./dist/env.d.ts"
|
||||||
|
},
|
||||||
"./pkgs": {
|
"./pkgs": {
|
||||||
"import": "./dist/pkgs.mjs",
|
"import": "./dist/pkgs.mjs",
|
||||||
"types": "./dist/pkgs.d.ts"
|
"types": "./dist/pkgs.d.ts"
|
||||||
@ -58,6 +50,9 @@
|
|||||||
"types": "./dist/file-store.d.ts"
|
"types": "./dist/file-store.d.ts"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"dotenv": "^16.4.7"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@kevisual/load": "^0.0.4"
|
"@kevisual/load": "^0.0.4"
|
||||||
}
|
}
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
// rollup.config.js
|
|
||||||
import typescript from '@rollup/plugin-typescript';
|
|
||||||
import resolve from '@rollup/plugin-node-resolve';
|
|
||||||
import commonjs from '@rollup/plugin-commonjs';
|
|
||||||
import { dts } from 'rollup-plugin-dts';
|
|
||||||
/**
|
|
||||||
* @type {import('rollup').RollupOptions}
|
|
||||||
*/
|
|
||||||
export default [
|
|
||||||
{
|
|
||||||
input: 'src/config.ts', // TypeScript 入口文件
|
|
||||||
output: {
|
|
||||||
file: 'dist/config.mjs', // 输出文件
|
|
||||||
format: 'es', // 输出格式设置为 ES 模块
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
resolve(), // 使用 @rollup/plugin-node-resolve 解析 node_modules 中的模块
|
|
||||||
commonjs(),
|
|
||||||
typescript(), // 使用 @rollup/plugin-typescript 处理 TypeScript 文件
|
|
||||||
],
|
|
||||||
external: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'src/config.ts',
|
|
||||||
output: {
|
|
||||||
file: 'dist/config.d.ts',
|
|
||||||
format: 'es',
|
|
||||||
},
|
|
||||||
plugins: [dts()],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'src/pkgs.ts', // TypeScript 入口文件
|
|
||||||
output: {
|
|
||||||
file: 'dist/pkgs.mjs', // 输出文件
|
|
||||||
format: 'es', // 输出格式设置为 ES 模块
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
resolve(), // 使用 @rollup/plugin-node-resolve 解析 node_modules 中的模块
|
|
||||||
commonjs(),
|
|
||||||
typescript(), // 使用 @rollup/plugin-typescript 处理 TypeScript 文件
|
|
||||||
],
|
|
||||||
external: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'src/pkgs.ts',
|
|
||||||
output: {
|
|
||||||
file: 'dist/pkgs.d.ts',
|
|
||||||
format: 'es',
|
|
||||||
},
|
|
||||||
plugins: [dts()],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'src/context.ts', // TypeScript 入口文件
|
|
||||||
output: {
|
|
||||||
file: 'dist/context.mjs', // 输出文件
|
|
||||||
format: 'es', // 输出格式设置为 ES 模块
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
resolve(), // 使用 @rollup/plugin-node-resolve 解析 node_modules 中的模块
|
|
||||||
commonjs(),
|
|
||||||
typescript(), // 使用 @rollup/plugin-typescript 处理 TypeScript 文件
|
|
||||||
],
|
|
||||||
external: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'src/context.ts',
|
|
||||||
output: {
|
|
||||||
file: 'dist/context.d.ts',
|
|
||||||
format: 'es',
|
|
||||||
},
|
|
||||||
plugins: [dts()],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'src/file-store.ts',
|
|
||||||
output: {
|
|
||||||
file: 'dist/file-store.mjs',
|
|
||||||
format: 'es',
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
resolve(),
|
|
||||||
commonjs(),
|
|
||||||
typescript(),
|
|
||||||
],
|
|
||||||
external: [],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: 'src/file-store.ts',
|
|
||||||
output: {
|
|
||||||
file: 'dist/file-store.d.ts',
|
|
||||||
format: 'es',
|
|
||||||
},
|
|
||||||
plugins: [dts()],
|
|
||||||
}
|
|
||||||
];
|
|
@ -104,6 +104,7 @@ export const init = (initConfigBase?: any): Config => {
|
|||||||
* @param initConfig 在全局未找到配置时,初始化配置的内容
|
* @param initConfig 在全局未找到配置时,初始化配置的内容
|
||||||
*
|
*
|
||||||
* @returns Config
|
* @returns Config
|
||||||
|
* @deprecated 请使用 @kevisual/use-config/env 代替 1.0.15 版本删除
|
||||||
*/
|
*/
|
||||||
export const useConfig = <T>(initConfig?: any): Config & T => {
|
export const useConfig = <T>(initConfig?: any): Config & T => {
|
||||||
const config = (global as any).config;
|
const config = (global as any).config;
|
||||||
|
134
src/env.ts
Normal file
134
src/env.ts
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
import dotenv from 'dotenv';
|
||||||
|
|
||||||
|
// 配置类型
|
||||||
|
export type Config = {
|
||||||
|
port: number;
|
||||||
|
tokenSecret?: string;
|
||||||
|
redis?: {
|
||||||
|
host?: string;
|
||||||
|
port?: number;
|
||||||
|
password?: string;
|
||||||
|
version?: string;
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
|
posgtres?: {
|
||||||
|
host?: string;
|
||||||
|
port?: number;
|
||||||
|
user?: string;
|
||||||
|
password?: string;
|
||||||
|
database?: string;
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
|
minio?: {
|
||||||
|
endPoint?: string;
|
||||||
|
bucketName?: string;
|
||||||
|
useSSL?: boolean;
|
||||||
|
accessKey?: string;
|
||||||
|
secretKey?: string;
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
|
mongo?: {
|
||||||
|
uri?: string;
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
||||||
|
export const initConfig: Config = {
|
||||||
|
port: 3000,
|
||||||
|
};
|
||||||
|
export const fileIsExist = (path: string) => {
|
||||||
|
try {
|
||||||
|
fs.accessSync(path, fs.constants.F_OK);
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
export const getDirname = () => {
|
||||||
|
return process.cwd();
|
||||||
|
};
|
||||||
|
type ConfigOpts = {
|
||||||
|
envConfigFile?: string;
|
||||||
|
cwd?: string;
|
||||||
|
fileName?: string;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* 查找文件,3级查找。往上查询
|
||||||
|
* @param fileName 文件名
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export const getConfigFile = (opts?: ConfigOpts) => {
|
||||||
|
if (opts?.envConfigFile) {
|
||||||
|
const filePath = path.join(opts.cwd || getDirname(), opts.envConfigFile);
|
||||||
|
if (fileIsExist(filePath)) {
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const fileName = opts?.fileName || '.env';
|
||||||
|
const dirname = opts?.cwd || getDirname();
|
||||||
|
// 本级
|
||||||
|
const benPath = dirname + '/' + fileName;
|
||||||
|
const ben = fileIsExist(benPath);
|
||||||
|
if (ben) return benPath;
|
||||||
|
// 上级
|
||||||
|
const lastPath = path.join(dirname, '../' + fileName);
|
||||||
|
const last = fileIsExist(lastPath);
|
||||||
|
if (last) return lastPath;
|
||||||
|
// 上上级
|
||||||
|
const lastLastPath = path.join(dirname, '../../' + fileName);
|
||||||
|
const lastLast = fileIsExist(lastLastPath);
|
||||||
|
if (lastLast) return lastLastPath;
|
||||||
|
return '';
|
||||||
|
};
|
||||||
|
|
||||||
|
// 初始化读取配置文件
|
||||||
|
export const init = (opts?: ConfigOpts & { dotenvOpts?: dotenv.DotenvConfigOptions }): Config => {
|
||||||
|
if (opts?.dotenvOpts) {
|
||||||
|
const prased = dotenv.config(opts.dotenvOpts).parsed as Config;
|
||||||
|
if (prased) {
|
||||||
|
return prased;
|
||||||
|
} else {
|
||||||
|
throw new Error('未找到配置文件');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 配置读取路径,3级判断
|
||||||
|
const filePath = getConfigFile(opts);
|
||||||
|
console.log('config pathname:', filePath);
|
||||||
|
if (!filePath) {
|
||||||
|
throw new Error('未找到配置文件');
|
||||||
|
}
|
||||||
|
const value = dotenv.config({ path: filePath }).parsed as Config;
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从全局获取
|
||||||
|
* @param initConfig 在全局未找到配置时,初始化配置的内容
|
||||||
|
*
|
||||||
|
* @returns Config
|
||||||
|
*/
|
||||||
|
export const useConfig = <T>(): Config & T => {
|
||||||
|
const config = (global as any).config;
|
||||||
|
const _config = config || init();
|
||||||
|
!config && ((global as any)['config'] = _config);
|
||||||
|
return _config;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useKey = (key: string, opts?: { defaultValue?: string; isNumber?: boolean; isBoolean?: boolean }): string | number | boolean => {
|
||||||
|
let v = useConfig()[key];
|
||||||
|
if (!v) {
|
||||||
|
v = process.env[key];
|
||||||
|
}
|
||||||
|
if (!v) {
|
||||||
|
return opts?.defaultValue || null;
|
||||||
|
}
|
||||||
|
if (opts?.isNumber) {
|
||||||
|
return Number(v);
|
||||||
|
}
|
||||||
|
if (opts?.isBoolean) {
|
||||||
|
return v === 'true';
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
};
|
11
src/test/env-get.ts
Normal file
11
src/test/env-get.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { useConfig, useKey } from '../env.ts';
|
||||||
|
|
||||||
|
const config = useConfig();
|
||||||
|
|
||||||
|
console.log(config);
|
||||||
|
|
||||||
|
const a = useKey('a');
|
||||||
|
|
||||||
|
console.log(a);
|
||||||
|
|
||||||
|
console.log(process.env);
|
@ -29,6 +29,5 @@
|
|||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules",
|
"node_modules",
|
||||||
"rollup.config.js",
|
|
||||||
]
|
]
|
||||||
}
|
}
|
20
tsup.config.ts
Normal file
20
tsup.config.ts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import { defineConfig } from 'tsup';
|
||||||
|
// import glob from 'fast-glob';
|
||||||
|
// const services = glob.sync('src/services/*.ts');
|
||||||
|
|
||||||
|
const entrys = ['src/index.ts', 'src/config.ts', 'src/pkgs.ts', 'src/context.ts', 'src/file-store.ts', 'src/env.ts'];
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
entry: entrys,
|
||||||
|
outExtension: ({ format }) => ({
|
||||||
|
js: format === 'esm' ? '.mjs' : '.js',
|
||||||
|
}),
|
||||||
|
splitting: false,
|
||||||
|
sourcemap: false,
|
||||||
|
clean: true,
|
||||||
|
format: 'esm',
|
||||||
|
external: ['dotenv'],
|
||||||
|
dts: true,
|
||||||
|
outDir: 'dist',
|
||||||
|
tsconfig: 'tsconfig.json',
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user