UNPKG

xl-aya

Version:

ssr 工具库

87 lines (80 loc) 3.02 kB
#!/usr/bin/env node 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);