feat(aklive2d): add directory building

- rename __dirname to __projectRoot
- rename runner.js to aklive2d.js
- add npm scripts
- add directory building commands (dev/build)
This commit is contained in:
Haoyu Xu
2023-02-20 18:15:16 -05:00
parent 0e4017351d
commit 6307bfd017
17 changed files with 389 additions and 735 deletions

139
vite.js
View File

@@ -4,76 +4,139 @@ import { createServer, build, loadEnv } from 'vite'
import getConfig from './libs/config.js'
import { rm } from './libs/file.js'
global.__dirname = path.dirname(fileURLToPath(import.meta.url))
global.__projetRoot = path.dirname(fileURLToPath(import.meta.url))
const MODE = process.argv[2]
export default class Vite {
#operatorName = process.argv[3]
#config = getConfig()
#globalConfig = getConfig()
dev() {
async start() {
let result;
switch (MODE) {
case 'dev':
case 'build':
case 'build-all':
result = this.operator()
break
case 'directory':
result = await this.directory()
break
default:
return
}
const mode = result.mode
const envPath = result.envPath
const viteConfig = result.viteConfig
switch (mode) {
case 'dev':
this.#dev(envPath, viteConfig)
break
case 'build':
case 'build-all':
this.#build(envPath, viteConfig)
break
default:
break
}
}
#dev(envPath, viteConfig) {
; (async () => {
this.#loadEnvFromEnvFile('development')
const server = await createServer(this.#viteConfig)
this.#loadEnvFromEnvFile('development', envPath)
const server = await createServer(viteConfig)
await server.listen()
server.printUrls()
})()
}
build() {
#build(envPath, viteConfig) {
; (async () => {
this.#loadEnvFromEnvFile('production')
console.log("Building", this.#operatorName, "...")
this.#loadEnvFromEnvFile('production', envPath)
await build({
...this.#viteConfig,
...viteConfig,
logLevel: 'silent',
})
})()
}
#loadEnvFromEnvFile(mode) {
const envPath = path.join(__dirname, this.#config.folder.operator, this.#operatorName)
process.env = { ...loadEnv(mode, envPath) }
rm(path.join(envPath, '.env'))
}
get #viteConfig() {
return {
operator() {
const operatorName = process.argv[3]
const viteConfig = {
base: "",
publicDir: path.resolve(__dirname, this.#config.folder.release, this.#operatorName),
root: path.resolve(__dirname),
publicDir: path.resolve(__projetRoot, this.#globalConfig.folder.release, operatorName),
root: path.resolve(__projetRoot),
server: {
host: '0.0.0.0',
},
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
'!': path.resolve(__dirname, this.#config.folder.operator, this.#operatorName),
'@': path.resolve(__projetRoot, './src'),
'!': path.resolve(__projetRoot, this.#globalConfig.folder.operator, operatorName),
},
},
build: {
outDir: path.resolve(__dirname, this.#config.folder.release, this.#operatorName),
outDir: path.resolve(__projetRoot, this.#globalConfig.folder.release, operatorName),
emptyOutDir: false,
chunkSizeWarningLimit: 10000,
},
}
const envPath = path.join(__projetRoot, this.#globalConfig.folder.operator, operatorName)
return {
mode: MODE,
envPath,
viteConfig
}
}
async directory() {
const { default: react } = await import('@vitejs/plugin-react-swc')
const directoryDir = path.resolve(__projetRoot, 'directory')
const mode = process.argv[3]
const viteConfig = {
base: "",
plugins: [react()],
publicDir: path.resolve(__projetRoot, this.#globalConfig.folder.release),
root: directoryDir,
server: {
host: '0.0.0.0',
},
resolve: {
alias: {
'@': path.resolve(directoryDir, './src'),
'!': path.resolve(__projetRoot, this.#globalConfig.folder.release, this.#globalConfig.folder.directory),
},
},
build: {
outDir: path.resolve(__projetRoot, this.#globalConfig.folder.release),
emptyOutDir: false,
chunkSizeWarningLimit: 10000,
rollupOptions: {
output: {
manualChunks: {
},
}
}
},
}
const envPath = directoryDir
return {
mode,
envPath,
viteConfig
}
}
#loadEnvFromEnvFile(mode, envPath) {
process.env = { ...loadEnv(mode, envPath) }
rm(path.join(envPath, '.env'))
}
}
function main() {
const MODE = process.argv[2]
async function main() {
const vite = new Vite()
switch (MODE) {
case 'dev':
vite.dev()
break
case 'build':
case 'build-all':
vite.build()
break
default:
break
}
await vite.start()
}
main()