mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-08 09:27:19 +08:00
149 lines
6.0 KiB
JavaScript
149 lines
6.0 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createServer = exports.rewriteImports = void 0;
|
|
const path_1 = __importDefault(require("path"));
|
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
const koa_1 = __importDefault(require("koa"));
|
|
const chokidar_1 = __importDefault(require("chokidar"));
|
|
const resolver_1 = require("../resolver");
|
|
const serverPluginModuleRewrite_1 = require("./serverPluginModuleRewrite");
|
|
const serverPluginModuleResolve_1 = require("./serverPluginModuleResolve");
|
|
const serverPluginVue_1 = require("./serverPluginVue");
|
|
const serverPluginHmr_1 = require("./serverPluginHmr");
|
|
const serverPluginServeStatic_1 = require("./serverPluginServeStatic");
|
|
const serverPluginJson_1 = require("./serverPluginJson");
|
|
const serverPluginCss_1 = require("./serverPluginCss");
|
|
const serverPluginAssets_1 = require("./serverPluginAssets");
|
|
const serverPluginEsbuild_1 = require("./serverPluginEsbuild");
|
|
const transform_1 = require("../transform");
|
|
const serverPluginHtml_1 = require("./serverPluginHtml");
|
|
const serverPluginProxy_1 = require("./serverPluginProxy");
|
|
const createCertificate_1 = require("../utils/createCertificate");
|
|
const utils_1 = require("../utils");
|
|
const serverPluginEnv_1 = require("./serverPluginEnv");
|
|
var serverPluginModuleRewrite_2 = require("./serverPluginModuleRewrite");
|
|
Object.defineProperty(exports, "rewriteImports", { enumerable: true, get: function () { return serverPluginModuleRewrite_2.rewriteImports; } });
|
|
const serverPluginSourceMap_1 = require("./serverPluginSourceMap");
|
|
const serverPluginWebWorker_1 = require("./serverPluginWebWorker");
|
|
const serverPluginWasm_1 = require("./serverPluginWasm");
|
|
const serverPluginClient_1 = require("./serverPluginClient");
|
|
function createServer(config) {
|
|
const { root = process.cwd(), configureServer = [], resolvers = [], alias = {}, transforms = [], vueCustomBlockTransforms = {}, optimizeDeps = {}, enableEsbuild = true, assetsInclude } = config;
|
|
const app = new koa_1.default();
|
|
const server = resolveServer(config, app.callback());
|
|
const watcher = chokidar_1.default.watch(root, {
|
|
ignored: [/node_modules/, /\.git/],
|
|
// #610
|
|
awaitWriteFinish: {
|
|
stabilityThreshold: 100,
|
|
pollInterval: 10
|
|
}
|
|
});
|
|
const resolver = resolver_1.createResolver(root, resolvers, alias, assetsInclude);
|
|
const context = {
|
|
root,
|
|
app,
|
|
server,
|
|
watcher,
|
|
resolver,
|
|
config,
|
|
// port is exposed on the context for hmr client connection
|
|
// in case the files are served under a different port
|
|
port: config.port || 3000
|
|
};
|
|
// attach server context to koa context
|
|
app.use((ctx, next) => {
|
|
Object.assign(ctx, context);
|
|
ctx.read = utils_1.cachedRead.bind(null, ctx);
|
|
return next();
|
|
});
|
|
// cors
|
|
if (config.cors) {
|
|
app.use(require('@koa/cors')(typeof config.cors === 'boolean' ? {} : config.cors));
|
|
}
|
|
const resolvedPlugins = [
|
|
// rewrite and source map plugins take highest priority and should be run
|
|
// after all other middlewares have finished
|
|
serverPluginSourceMap_1.sourceMapPlugin,
|
|
serverPluginModuleRewrite_1.moduleRewritePlugin,
|
|
serverPluginHtml_1.htmlRewritePlugin,
|
|
// user plugins
|
|
...utils_1.toArray(configureServer),
|
|
serverPluginEnv_1.envPlugin,
|
|
serverPluginModuleResolve_1.moduleResolvePlugin,
|
|
serverPluginProxy_1.proxyPlugin,
|
|
serverPluginClient_1.clientPlugin,
|
|
serverPluginHmr_1.hmrPlugin,
|
|
...(transforms.length || Object.keys(vueCustomBlockTransforms).length
|
|
? [
|
|
transform_1.createServerTransformPlugin(transforms, vueCustomBlockTransforms, resolver)
|
|
]
|
|
: []),
|
|
serverPluginVue_1.vuePlugin,
|
|
serverPluginCss_1.cssPlugin,
|
|
enableEsbuild ? serverPluginEsbuild_1.esbuildPlugin : null,
|
|
serverPluginJson_1.jsonPlugin,
|
|
serverPluginAssets_1.assetPathPlugin,
|
|
serverPluginWebWorker_1.webWorkerPlugin,
|
|
serverPluginWasm_1.wasmPlugin,
|
|
serverPluginServeStatic_1.serveStaticPlugin
|
|
];
|
|
resolvedPlugins.forEach((m) => m && m(context));
|
|
const listen = server.listen.bind(server);
|
|
server.listen = (async (port, ...args) => {
|
|
if (optimizeDeps.auto !== false) {
|
|
await require('../optimizer').optimizeDeps(config);
|
|
}
|
|
return listen(port, ...args);
|
|
});
|
|
server.once('listening', () => {
|
|
context.port = server.address().port;
|
|
});
|
|
return server;
|
|
}
|
|
exports.createServer = createServer;
|
|
function resolveServer({ https = false, httpsOptions = {}, proxy }, requestListener) {
|
|
if (https) {
|
|
if (proxy) {
|
|
// #484 fallback to http1 when proxy is needed.
|
|
return require('https').createServer(resolveHttpsConfig(httpsOptions), requestListener);
|
|
}
|
|
else {
|
|
return require('http2').createSecureServer({
|
|
...resolveHttpsConfig(httpsOptions),
|
|
allowHTTP1: true
|
|
}, requestListener);
|
|
}
|
|
}
|
|
else {
|
|
return require('http').createServer(requestListener);
|
|
}
|
|
}
|
|
function resolveHttpsConfig(httpsOption) {
|
|
const { ca, cert, key, pfx } = httpsOption;
|
|
Object.assign(httpsOption, {
|
|
ca: readFileIfExists(ca),
|
|
cert: readFileIfExists(cert),
|
|
key: readFileIfExists(key),
|
|
pfx: readFileIfExists(pfx)
|
|
});
|
|
if (!httpsOption.key || !httpsOption.cert) {
|
|
httpsOption.cert = httpsOption.key = createCertificate_1.createCertificate();
|
|
}
|
|
return httpsOption;
|
|
}
|
|
function readFileIfExists(value) {
|
|
if (value && !Buffer.isBuffer(value)) {
|
|
try {
|
|
return fs_extra_1.default.readFileSync(path_1.default.resolve(value));
|
|
}
|
|
catch (e) {
|
|
return value;
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
//# sourceMappingURL=index.js.map
|