feat(runner): update build-all command
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -37,4 +37,3 @@ dist-ssr
|
|||||||
*.njsproj
|
*.njsproj
|
||||||
*.sln
|
*.sln
|
||||||
*.sw?
|
*.sw?
|
||||||
node_modules
|
|
||||||
@@ -9,13 +9,8 @@ export default class EnvGenerator {
|
|||||||
this.#assets = assets
|
this.#assets = assets
|
||||||
}
|
}
|
||||||
|
|
||||||
async generate() {
|
generate() {
|
||||||
return await this.#promise()
|
return [
|
||||||
}
|
|
||||||
|
|
||||||
#promise() {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
resolve([
|
|
||||||
`VITE_TITLE="${this.#operatorConfig.title}"`,
|
`VITE_TITLE="${this.#operatorConfig.title}"`,
|
||||||
`VITE_FILENAME=${this.#operatorConfig.filename.replace('#', '%23')}`,
|
`VITE_FILENAME=${this.#operatorConfig.filename.replace('#', '%23')}`,
|
||||||
`VITE_LOGO_FILENAME=${this.#operatorConfig.logo}`,
|
`VITE_LOGO_FILENAME=${this.#operatorConfig.logo}`,
|
||||||
@@ -29,8 +24,7 @@ export default class EnvGenerator {
|
|||||||
`VITE_IMAGE_HEIGHT=2048`,
|
`VITE_IMAGE_HEIGHT=2048`,
|
||||||
`VITE_BACKGROUND_FILES=${JSON.stringify(this.#assets.backgrounds)}`,
|
`VITE_BACKGROUND_FILES=${JSON.stringify(this.#assets.backgrounds)}`,
|
||||||
`VITE_BACKGROUND_FOLDER=${this.#config.folder.background}`,
|
`VITE_BACKGROUND_FOLDER=${this.#config.folder.background}`,
|
||||||
].join('\n'))
|
].join('\n')
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
26
libs/exec.js
26
libs/exec.js
@@ -1,26 +0,0 @@
|
|||||||
import { execSync } from 'child_process'
|
|
||||||
import { createServer, build } from 'vite'
|
|
||||||
|
|
||||||
export function buildAll(config) {
|
|
||||||
for (const [key, _] of Object.entries(config.operators)) {
|
|
||||||
if (key.startsWith('_')) break;
|
|
||||||
console.log(execSync(`node runner.js build ${key}`).toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function runDev(rootDir) {
|
|
||||||
; (async () => {
|
|
||||||
const server = await createServer({
|
|
||||||
root: rootDir,
|
|
||||||
})
|
|
||||||
await server.listen()
|
|
||||||
|
|
||||||
server.printUrls()
|
|
||||||
})()
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function runBuild(rootDir) {
|
|
||||||
await build({
|
|
||||||
root: rootDir,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
48
libs/vite.js
Normal file
48
libs/vite.js
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import path from 'path'
|
||||||
|
import { createServer, build } from 'vite'
|
||||||
|
|
||||||
|
export default class Vite {
|
||||||
|
#config
|
||||||
|
#rootDir
|
||||||
|
#operatorName
|
||||||
|
|
||||||
|
constructor(config, operatorName, rootDir) {
|
||||||
|
this.#config = config
|
||||||
|
this.#operatorName = operatorName
|
||||||
|
this.#rootDir = rootDir
|
||||||
|
}
|
||||||
|
|
||||||
|
dev() {
|
||||||
|
; (async () => {
|
||||||
|
const server = await createServer(this.#viteConfig)
|
||||||
|
await server.listen()
|
||||||
|
|
||||||
|
server.printUrls()
|
||||||
|
})()
|
||||||
|
}
|
||||||
|
|
||||||
|
async build() {
|
||||||
|
await build(this.#viteConfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
get #viteConfig() {
|
||||||
|
return {
|
||||||
|
base: "",
|
||||||
|
publicDir: path.resolve(this.#rootDir, this.#config.folder.release, this.#operatorName),
|
||||||
|
root: path.resolve(this.#rootDir),
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': path.resolve(this.#rootDir, './src'),
|
||||||
|
'!': path.resolve(this.#rootDir, this.#config.folder.operator, this.#operatorName),
|
||||||
|
'#': path.resolve(this.#config.basedir, this.#config.folder.operator, this.#operatorName, `${this.#config.operators[this.#operatorName].filename}.json`),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
outDir: path.resolve(this.#rootDir, this.#config.folder.release, this.#operatorName),
|
||||||
|
emptyOutDir: false,
|
||||||
|
chunkSizeWarningLimit: 10000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
53
runner.js
53
runner.js
@@ -4,11 +4,11 @@ import { fileURLToPath } from 'url'
|
|||||||
import getConfig from './libs/config.js'
|
import getConfig from './libs/config.js'
|
||||||
import ProjectJson from './libs/project_json.js'
|
import ProjectJson from './libs/project_json.js'
|
||||||
import EnvGenerator from './libs/env_generator.js'
|
import EnvGenerator from './libs/env_generator.js'
|
||||||
import { write, rmdir, copy } from './libs/file.js'
|
import { write, rmdir, copy, writeSync, rm } from './libs/file.js'
|
||||||
import AssetsProcessor from './libs/assets_processor.js'
|
import AssetsProcessor from './libs/assets_processor.js'
|
||||||
import init from './libs/initializer.js'
|
import init from './libs/initializer.js'
|
||||||
import directory from './libs/directory.js'
|
import directory from './libs/directory.js'
|
||||||
import { buildAll, runDev, runBuild } from './libs/exec.js'
|
import Vite from './libs/vite.js'
|
||||||
import { appendReadme } from './libs/append.js'
|
import { appendReadme } from './libs/append.js'
|
||||||
import Background from './libs/background.js'
|
import Background from './libs/background.js'
|
||||||
|
|
||||||
@@ -17,10 +17,13 @@ async function main() {
|
|||||||
const config = getConfig(__dirname)
|
const config = getConfig(__dirname)
|
||||||
|
|
||||||
const op = process.argv[2]
|
const op = process.argv[2]
|
||||||
const OPERATOR_NAME = process.argv[3];
|
let OPERATOR_NAMES = process.argv.slice(3);
|
||||||
|
|
||||||
const background = new Background(config, __dirname)
|
const background = new Background(config, __dirname)
|
||||||
await background.process()
|
await background.process()
|
||||||
|
const backgrounds = ['operator_bg.png', ...background.files]
|
||||||
|
|
||||||
|
directory(config, __dirname)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skip all, no need for OPERATOR_NAME
|
* Skip all, no need for OPERATOR_NAME
|
||||||
@@ -28,22 +31,22 @@ async function main() {
|
|||||||
* directory: build directory.json
|
* directory: build directory.json
|
||||||
*/
|
*/
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case 'build-all':
|
|
||||||
buildAll(config)
|
|
||||||
process.exit(0)
|
|
||||||
case 'directory':
|
case 'directory':
|
||||||
directory(config, __dirname)
|
|
||||||
process.exit(0)
|
process.exit(0)
|
||||||
|
case 'build-all':
|
||||||
|
for (const [key, _] of Object.entries(config.operators)) {
|
||||||
|
OPERATOR_NAMES.push(key)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(OPERATOR_NAME !== undefined, 'Please set the operator name.')
|
assert(OPERATOR_NAMES.length !== 0, 'Please set the operator name.')
|
||||||
|
|
||||||
|
for (const OPERATOR_NAME of OPERATOR_NAMES) {
|
||||||
const OPERATOR_SOURCE_FOLDER = path.join(__dirname, config.folder.operator)
|
const OPERATOR_SOURCE_FOLDER = path.join(__dirname, config.folder.operator)
|
||||||
const OPERATOR_RELEASE_FOLDER = path.join(__dirname, config.folder.release, OPERATOR_NAME)
|
const OPERATOR_RELEASE_FOLDER = path.join(__dirname, config.folder.release, OPERATOR_NAME)
|
||||||
const SHOWCASE_PUBLIC_FOLDER = path.join(__dirname, "public")
|
const SHOWCASE_PUBLIC_ASSSETS_FOLDER = path.join(OPERATOR_RELEASE_FOLDER, "assets")
|
||||||
const SHOWCASE_PUBLIC_ASSSETS_FOLDER = path.join(SHOWCASE_PUBLIC_FOLDER, "assets")
|
|
||||||
const EXTRACTED_FOLDER = path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, 'extracted')
|
const EXTRACTED_FOLDER = path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, 'extracted')
|
||||||
const OPERATOR_SHARE_FOLDER = path.join(OPERATOR_SOURCE_FOLDER, '_share')
|
const OPERATOR_SHARE_FOLDER = path.join(OPERATOR_SOURCE_FOLDER, '_share')
|
||||||
|
|
||||||
@@ -65,8 +68,6 @@ async function main() {
|
|||||||
|
|
||||||
rmdir(OPERATOR_RELEASE_FOLDER)
|
rmdir(OPERATOR_RELEASE_FOLDER)
|
||||||
|
|
||||||
const backgrounds = ['operator_bg.png', ...background.files]
|
|
||||||
|
|
||||||
const projectJson = new ProjectJson(config, OPERATOR_NAME, __dirname, OPERATOR_SHARE_FOLDER, {
|
const projectJson = new ProjectJson(config, OPERATOR_NAME, __dirname, OPERATOR_SHARE_FOLDER, {
|
||||||
backgrounds
|
backgrounds
|
||||||
})
|
})
|
||||||
@@ -79,13 +80,6 @@ async function main() {
|
|||||||
write(JSON.stringify(content.assetsJson, null), path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, `${config.operators[OPERATOR_NAME].filename}.json`))
|
write(JSON.stringify(content.assetsJson, null), path.join(OPERATOR_SOURCE_FOLDER, OPERATOR_NAME, `${config.operators[OPERATOR_NAME].filename}.json`))
|
||||||
})
|
})
|
||||||
|
|
||||||
const envGenerator = new EnvGenerator(config, OPERATOR_NAME, {
|
|
||||||
backgrounds
|
|
||||||
})
|
|
||||||
envGenerator.generate().then((content) => {
|
|
||||||
write(content, path.join(__dirname, '.env'))
|
|
||||||
})
|
|
||||||
|
|
||||||
const filesToCopy = [
|
const filesToCopy = [
|
||||||
...background.getFilesToCopy(SHOWCASE_PUBLIC_ASSSETS_FOLDER),
|
...background.getFilesToCopy(SHOWCASE_PUBLIC_ASSSETS_FOLDER),
|
||||||
{
|
{
|
||||||
@@ -109,24 +103,31 @@ async function main() {
|
|||||||
target: path.join(SHOWCASE_PUBLIC_ASSSETS_FOLDER)
|
target: path.join(SHOWCASE_PUBLIC_ASSSETS_FOLDER)
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
filesToCopy.forEach(async (file) => {
|
filesToCopy.forEach((file) => {
|
||||||
await copy(path.join(file.source, file.filename), path.join(file.target, file.filename))
|
copy(path.join(file.source, file.filename), path.join(file.target, file.filename))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const envPath = path.join(__dirname, '.env')
|
||||||
|
writeSync((new EnvGenerator(config, OPERATOR_NAME, {
|
||||||
|
backgrounds
|
||||||
|
})).generate(), envPath)
|
||||||
/**
|
/**
|
||||||
* dev: run dev server
|
* dev: run dev server
|
||||||
* build: build assets
|
* build: build assets
|
||||||
*/
|
*/
|
||||||
|
const vite = new Vite(config, OPERATOR_NAME, __dirname)
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case 'dev':
|
case 'dev':
|
||||||
runDev(__dirname)
|
vite.dev()
|
||||||
break
|
break
|
||||||
case 'build':
|
case 'build':
|
||||||
await runBuild(__dirname)
|
case 'build-all':
|
||||||
case 'generate':
|
await vite.build()
|
||||||
default:
|
rm(envPath)
|
||||||
rmdir(SHOWCASE_PUBLIC_FOLDER)
|
|
||||||
break
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
import { defineConfig } from 'vite'
|
|
||||||
import path from 'path'
|
|
||||||
import getConfig from './libs/config.js'
|
|
||||||
|
|
||||||
const data = {
|
|
||||||
config: getConfig(__dirname),
|
|
||||||
OPERATOR_NAME: process.argv[3],
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
|
||||||
export default defineConfig({
|
|
||||||
base: "",
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
'@': path.resolve(__dirname, './src'),
|
|
||||||
'!': path.resolve(data.config.basedir, data.config.folder.operator, data.OPERATOR_NAME),
|
|
||||||
'#': path.resolve(data.config.basedir, data.config.folder.operator, data.OPERATOR_NAME, `${data.config.operators[data.OPERATOR_NAME].filename}.json`),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
build: {
|
|
||||||
outDir: path.resolve(data.config.basedir, data.config.folder.release, data.OPERATOR_NAME),
|
|
||||||
emptyOutDir: false,
|
|
||||||
chunkSizeWarningLimit: 10000,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
Reference in New Issue
Block a user