vben
2021-01-19 ca4f1a8faf7d588c0d57d0dc81f4dc04cd757380
提交 | 用户 | age
2f6253 1 import fs from 'fs';
bb3b8f 2 import path from 'path';
2f6253 3 import { networkInterfaces } from 'os';
4 import dotenv from 'dotenv';
bb3b8f 5 import chalk from 'chalk';
6211ba 6 // import execa from 'execa';
bb3b8f 7
2f6253 8 export const isFunction = (arg: unknown): arg is (...args: any[]) => any =>
9   typeof arg === 'function';
2f1fbf 10
2f6253 11 export const isRegExp = (arg: unknown): arg is RegExp =>
12   Object.prototype.toString.call(arg) === '[object RegExp]';
13
2f1fbf 14 /**
V 15  * get client ip address
16  */
2f6253 17 export function getIPAddress() {
18   let interfaces = networkInterfaces();
19   for (let devName in interfaces) {
20     let iFace = interfaces[devName];
21     if (!iFace) return;
22     for (let i = 0; i < iFace.length; i++) {
23       let alias = iFace[i];
24       if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
25         return alias.address;
26       }
27     }
28   }
29
30   return '';
31 }
32
99ac30 33 export function isDevFn(mode: string): boolean {
bd7b53 34   return mode === 'development';
2f6253 35 }
36
99ac30 37 export function isProdFn(mode: string): boolean {
bd7b53 38   return mode === 'production';
2f6253 39 }
40
2f1fbf 41 /**
V 42  * Whether to generate package preview
43  */
2f6253 44 export function isReportMode(): boolean {
45   return process.env.REPORT === 'true';
46 }
2f1fbf 47
V 48 /**
49  * Whether to generate gzip for packaging
50  */
8a1bfd 51 export function isBuildGzip(): boolean {
V 52   return process.env.VITE_BUILD_GZIP === 'true';
53 }
2f1fbf 54
e8aede 55 export interface ViteEnv {
B 56   VITE_PORT: number;
57   VITE_USE_MOCK: boolean;
a1b990 58   VITE_USE_PWA: boolean;
e8aede 59   VITE_PUBLIC_PATH: string;
B 60   VITE_PROXY: [string, string][];
bb3b8f 61   VITE_GLOB_APP_TITLE: string;
99ac30 62   VITE_GLOB_APP_SHORT_NAME: string;
bb3b8f 63   VITE_USE_CDN: boolean;
8a1bfd 64   VITE_DROP_CONSOLE: boolean;
V 65   VITE_BUILD_GZIP: boolean;
6f8d75 66   VITE_DYNAMIC_IMPORT: boolean;
99ac30 67   VITE_LEGACY: boolean;
e8aede 68 }
B 69
2f1fbf 70 // Read all environment variable configuration files to process.env
bd7b53 71 export function wrapperEnv(envConf: any): ViteEnv {
2f6253 72   const ret: any = {};
73
bd7b53 74   for (const envName of Object.keys(envConf)) {
V 75     let realName = envConf[envName].replace(/\\n/g, '\n');
e8aede 76     realName = realName === 'true' ? true : realName === 'false' ? false : realName;
B 77     if (envName === 'VITE_PORT') {
78       realName = Number(realName);
79     }
80     if (envName === 'VITE_PROXY') {
81       try {
82         realName = JSON.parse(realName);
83       } catch (error) {}
84     }
2f6253 85     ret[envName] = realName;
86     process.env[envName] = realName;
87   }
88   return ret;
89 }
bb3b8f 90
2f1fbf 91 /**
V 92  * Get the environment variables starting with the specified prefix
93  * @param match prefix
94  * @param confFiles ext
95  */
bb3b8f 96 export function getEnvConfig(match = 'VITE_GLOB_', confFiles = ['.env', '.env.production']) {
N 97   let envConfig = {};
98   confFiles.forEach((item) => {
99     try {
100       const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)));
101
102       envConfig = { ...envConfig, ...env };
103     } catch (error) {}
104   });
105   Object.keys(envConfig).forEach((key) => {
106     const reg = new RegExp(`^(${match})`);
107     if (!reg.test(key)) {
108       Reflect.deleteProperty(envConfig, key);
109     }
110   });
111   return envConfig;
112 }
113
31e271 114 function consoleFn(color: string, message: any) {
bb3b8f 115   console.log(
N 116     chalk.blue.bold('****************  ') +
31e271 117       (chalk as any)[color].bold(message) +
bb3b8f 118       chalk.blue.bold('  ****************')
N 119   );
31e271 120 }
V 121
2f1fbf 122 /**
V 123  * warnConsole
124  * @param message
125  */
31e271 126 export function successConsole(message: any) {
V 127   consoleFn('green', '✨ ' + message);
bb3b8f 128 }
N 129
2f1fbf 130 /**
V 131  * warnConsole
132  * @param message
133  */
bb3b8f 134 export function errorConsole(message: any) {
31e271 135   consoleFn('red', '✨ ' + message);
bb3b8f 136 }
N 137
2f1fbf 138 /**
V 139  * warnConsole
140  * @param message message
141  */
bb3b8f 142 export function warnConsole(message: any) {
31e271 143   consoleFn('yellow', '✨ ' + message);
bb3b8f 144 }
N 145
2f1fbf 146 /**
V 147  * Get user root directory
148  * @param dir file path
149  */
bb3b8f 150 export function getCwdPath(...dir: string[]) {
N 151   return path.resolve(process.cwd(), ...dir);
152 }