xl-aya
Version:
ssr 工具库
87 lines (80 loc) • 3.02 kB
JavaScript
const path = require('path');
const exec = require('child_process').exec;
const fs = require('fs');
const { program } = require('commander');
const mainPath = process.cwd();
const ayaPath = path.join(mainPath, '.aya');
const distPath = path.join(mainPath, 'dist');
const webpackPath = path.join(ayaPath, 'config');
function execSync(cmd) {
return new Promise((resolve, reject) => {
exec(cmd, (err, stdout, stderr) => {
if (err) reject(err);
if (stderr) reject(stderr);
resolve(stdout);
});
});
}
function readyPack() {
// 清除主工程的 .aya 文件夹
return execSync(`rm -rf ${path.join(mainPath, '.aya')}`)
.then((stdout) => {
console.log('清除.aya文件夹', stdout);
// 创建 .aya 文件夹
return execSync(`mkdir ${path.join(mainPath, '.aya')}`);
})
.then((stdout) => {
console.log('创建.aya文件夹', stdout);
// 在 .aya 文件夹生成最终的 app.ts
const appStr = '' +
'import App from "../src/app";\n' +
'import { clientInit } from "xl-aya";\n' +
'\n' +
'export default {\n' +
' ...App,\n' +
' clientInit,\n' +
'}' +
'';
fs.writeFileSync(path.join(ayaPath, 'app.ts'), appStr);
// 把 config 拷贝到 .aya
return execSync(`cp -r ${path.join(__dirname, '../config/.')} ${path.join(ayaPath, 'config')}`)
});
}
program.command('build').action(() => {
readyPack()
.then((stdout) => {
console.log('在.aya文件夹生成最终的app.ts和webpack配置', stdout);
console.log('开始打包,请稍等...');
// 执行 webpack 打包脚本
return execSync(`
rm -rf ${distPath} &
webpack --config ${path.join(webpackPath, 'webpack-ssr.js')} &
webpack --config ${path.join(webpackPath, 'webpack-csr.js')}
`);
})
.then((stdout) => {
console.log('打包成功!');
console.log(stdout);
})
.catch(e => console.error(e));
});
program.command('dev').action(() => {
readyPack()
.then(() => {
console.log('正在启动,请稍等...');
// 打包并 watch,同时启动 webpack-dev-server
return execSync(`
rm -rf ${distPath} &
webpack --config ${path.join(webpackPath, 'webpack-ssr.js')} --watch &
webpack --config ${path.join(webpackPath, 'webpack-csr.js')} --watch &
webpack serve --config ${path.join(webpackPath, 'webpack-dev.js')} --open
`);
})
.then((stdout) => {
console.log('启动成功!');
console.log(stdout);
})
.catch(e => console.error(e));
});
program.parse(process.argv);