UNPKG

@react-native-oh-tpl/react-native-config

Version:
84 lines (77 loc) 3.25 kB
import { harTasks ,OhosHarContext,OhosPluginId, OhosProjectContext} from '@ohos/hvigor-ohos-plugin'; import { hvigor, HvigorNode, HvigorPlugin } from '@ohos/hvigor'; import * as fs from 'fs'; import * as path from 'path'; function loadEnvFileToMap(fileName: string): Map<string, string> { console.log(`loadEnvFileToMap:fileName=${fileName}`) if (fs.existsSync(fileName)) { const envFilePath = path.resolve(__dirname, fileName); const envFileContent = fs.readFileSync(envFilePath, 'utf8'); const configMap = new Map<string, string>(); envFileContent.split('\n').forEach(line => { const trimmedLine = line.trim(); if (trimmedLine && !trimmedLine.startsWith('#')) { const [key, value] = trimmedLine.split('='); if (key && value != undefined) { configMap.set(key.trim(), value.trim()); } } }); return configMap; }else { console.log("**************************") console.log("*** Missing .env file ****") console.log("**************************") return []; } } // 生成配置类的 TypeScript 文件 function generateConfigClass(config: Map<string, string>) { const className = 'BuildConfig'; const classFilePath = path.resolve(__dirname, `${className}.ts`); const classContent = ` export class ${className} { ${Array.from(config.entries()) .map(([key, value]) => `public static readonly ${key}: string = "${value}";`) .join('\n')} } `; fs.writeFileSync(classFilePath, classContent.trim()); console.log(`Generated ${className}.ts with config`); } export function defineBuildConfig() { return { pluginId: 'BuildConfigTaskID', apply(pluginContext) { pluginContext.registerTask({ name: 'defineBuildConfig', run: (taskContext) => { const conPath = path.dirname(process.cwd()) const node = hvigor.getRootNode(); const appContext = node.getContext(OhosPluginId.OHOS_APP_PLUGIN) as OhosAppContext; const buildMode = appContext.getBuildMode() const extParams = hvigor.getParameter().getExtParams(); const buildProfileEnvFile = appContext.getBuildProfileOpt()?.app?.products[0]?.buildOption?.arkOptions?.buildProfileFields[`${buildMode}`]; let configFile; if(process.env.ENVFILE) { configFile = process.env.ENVFILE; console.log(`configFile=${configFile}, from process.env.ENVFILE`); } else if (buildProfileEnvFile) { configFile = buildProfileEnvFile; console.log(`configFile=${configFile}, from buildProfileFields[${buildMode}]`); } else { configFile = ".env" console.log(`configFile=${configFile}, from default`); } generateConfigClass(loadEnvFileToMap(conPath + path.sep + configFile)); }, dependencies: ['default@PreBuild'], postDependencies: ['default@ConfigureCmake'] }) } } } export default { system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ plugins: [defineBuildConfig()] /* Custom plugin to extend the functionality of Hvigor. */ }