49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
/**
 | 
						|
 * Generate additional configuration files when used for packaging. The file can be configured with some global variables, so that it can be changed directly externally without repackaging
 | 
						|
 */
 | 
						|
import fs, { writeFileSync } from 'fs-extra'
 | 
						|
import colors from 'picocolors'
 | 
						|
import { GLOB_CONFIG_FILE_NAME, OUTPUT_DIR } from '../constant'
 | 
						|
 | 
						|
import { getEnvConfig, getRootPath } from '../utils'
 | 
						|
import { getConfigFileName } from '../getConfigFileName'
 | 
						|
 | 
						|
import pkg from '../../package.json'
 | 
						|
 | 
						|
interface CreateConfigParams {
 | 
						|
  configName: string
 | 
						|
  config: any
 | 
						|
  configFileName?: string
 | 
						|
}
 | 
						|
 | 
						|
function createConfig(params: CreateConfigParams) {
 | 
						|
  const { configName, config, configFileName } = params
 | 
						|
  try {
 | 
						|
    const windowConf = `window.${configName}`
 | 
						|
    // Ensure that the variable will not be modified
 | 
						|
    let configStr = `${windowConf}=${JSON.stringify(config)};`
 | 
						|
    configStr += `
 | 
						|
      Object.freeze(${windowConf});
 | 
						|
      Object.defineProperty(window, "${configName}", {
 | 
						|
        configurable: false,
 | 
						|
        writable: false,
 | 
						|
      });
 | 
						|
    `.replace(/\s/g, '')
 | 
						|
 | 
						|
    fs.mkdirp(getRootPath(OUTPUT_DIR))
 | 
						|
    writeFileSync(getRootPath(`${OUTPUT_DIR}/${configFileName}`), configStr)
 | 
						|
 | 
						|
    console.log(`${colors.cyan(`✨ [${pkg.name}]`)} - configuration file is build successfully:`)
 | 
						|
    console.log(`${colors.gray(`${OUTPUT_DIR}/${colors.green(configFileName)}`)}\n`)
 | 
						|
  }
 | 
						|
  catch (error: any) {
 | 
						|
    console.log(colors.red(`configuration file configuration file failed to package:\n${error}`))
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export function runBuildConfig() {
 | 
						|
  const config = getEnvConfig()
 | 
						|
  const configFileName = getConfigFileName(config)
 | 
						|
  createConfig({ config, configName: configFileName, configFileName: GLOB_CONFIG_FILE_NAME })
 | 
						|
}
 |