qlin b0797260fc feat: 添加 login 插件 (#168)
* feat: 添加 login 插件

* docs: 优化 access docs 文档

* refactor: beforeRender迁移到router创建后

* fix: 修复清除webpack-cache问题

* refactor: 优化 plugin 插件

Co-authored-by: wanchun <445436867@qq.com>
2023-01-11 15:51:43 +08:00

121 lines
3.6 KiB
JavaScript

const path = require('path');
const fs = require('fs');
async function handleCacheClean(cwd) {
return new Promise((resolve, reject) => {
const cachePath = path.join(cwd, '.cache/webpack');
if (!fs.existsSync(cachePath)) {
return resolve();
}
require('get-folder-size')(cachePath, (err, size) => {
if (err) {
return reject(err);
}
// 大于 5G 清除缓存,修复 webpack 缓存无限增长问题
// https://github.com/webpack/webpack/issues/13291
if (size > 5 * 1024 * 1024 * 1024) {
require('fs-extra').removeSync(cachePath);
}
resolve(size);
});
});
}
export default (api) => {
const {
paths,
utils: { chalk, getPort, getHostName, changePort, logger },
} = api;
let port;
let hostname;
let server;
async function destroy() {
await server?.stop();
}
api.registerCommand({
command: 'dev',
description: 'start a local http service for development',
options: [
{
name: '--port',
description: 'http service port, like 8080',
},
{
name: '--https',
description: 'whether to turn on the https service',
},
],
async fn({ args = {} }) {
const { cleanTmpPathExceptCache, getBundleAndConfigs } = require('../buildDevUtils');
const connectHistoryMiddleware = require('./connectHistoryMiddleware').default;
await handleCacheClean(api.paths.cwd);
port = await getPort(process.env.PORT || args.port || api.config.devServer?.port);
changePort(port);
hostname = getHostName(api.config.devServer?.host);
// enable https
const isHTTPS = process.env.HTTPS || args.https || api.config.devServer?.https;
cleanTmpPathExceptCache({
absTmpPath: paths.absTmpPath,
});
await api.applyPlugins({
key: 'onGenerateFiles',
type: api.ApplyPluginsType.event,
});
await api.startWatch();
// dev
const { bundleConfig } = await getBundleAndConfigs({ api });
const beforeMiddlewares = await api.applyPlugins({
key: 'addBeforeMiddlewares',
type: api.ApplyPluginsType.add,
initialValue: [],
args: {},
});
const middlewares = await api.applyPlugins({
key: 'addMiddlewares',
type: api.ApplyPluginsType.add,
initialValue: [],
args: {},
});
const { startDevServer } = require('./devServer');
server = startDevServer({
webpackConfig: bundleConfig,
host: hostname,
port,
proxy: api.config.proxy,
https: isHTTPS,
beforeMiddlewares: [connectHistoryMiddleware(api), ...beforeMiddlewares],
afterMiddlewares: [...middlewares],
customerDevServerConfig: api.config.devServer,
});
return {
destroy,
};
},
});
api.registerMethod({
name: 'restartServer',
fn() {
logger.info(chalk.gray('Try to restart dev server...'));
destroy();
process.send({
type: 'RESTART',
});
},
});
};