50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import {WebContainer} from "@webcontainer/api";
|
|
import {Terminal} from "@xterm/xterm";
|
|
|
|
export async function installDependencies(instance: WebContainer, terminal: Terminal) {
|
|
const installProcess = await instance.spawn('npm', ['install']);
|
|
terminal.write("依赖安装中...");
|
|
installProcess.output.pipeTo(new WritableStream({
|
|
write(data) {
|
|
terminal.write(data);
|
|
}
|
|
}));
|
|
const exitCode = await installProcess.exit;
|
|
if (exitCode == 0) {
|
|
terminal.write("依赖安装完毕,准备运行\n");
|
|
return true;
|
|
} else {
|
|
terminal.write(`依赖安装失败,报错信息如上`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export async function startDevServer(instance: WebContainer, terminal: Terminal, callback: (url: string) => void) {
|
|
instance.on('server-ready', (_port, url) => {
|
|
terminal.write("服务启动完毕,即将进行加载");
|
|
setTimeout(() => {
|
|
callback(url);
|
|
}, 500)
|
|
});
|
|
|
|
terminal.write("启动服务中...");
|
|
const serverProcess = await instance.spawn('npm', ['run', 'start']);
|
|
serverProcess.output.pipeTo(
|
|
new WritableStream({
|
|
write(data) {
|
|
terminal.write(data);
|
|
},
|
|
})
|
|
)
|
|
const exitCode = await serverProcess.exit;
|
|
if (exitCode != 0) {
|
|
terminal.write(`服务启动失败,报错信息如上`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export async function writeIndexJS(instance: WebContainer, content: string) {
|
|
await instance.fs.writeFile('/index.js', content);
|
|
}
|
|
|