60 lines
2.4 KiB
JavaScript
60 lines
2.4 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.createPublicFileFilter = exports.initStatic = void 0;
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const debug_1 = __importDefault(require("debug"));
|
|
const pluginutils_1 = require("@rollup/pluginutils");
|
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
|
const static_1 = require("./middlewares/static");
|
|
const debugStatic = (0, debug_1.default)('uni:static');
|
|
/**
|
|
* devServer时提供static等目录的静态资源服务
|
|
* @param server
|
|
* @param param
|
|
*/
|
|
const initStatic = (server) => {
|
|
const filter = createPublicFileFilter();
|
|
const serve = (0, static_1.uniStaticMiddleware)({
|
|
etag: true,
|
|
resolve(pathname) {
|
|
if (!filter(pathname)) {
|
|
return;
|
|
}
|
|
const filename = path_1.default.join(process.env.UNI_INPUT_DIR, pathname);
|
|
if (fs_1.default.existsSync(filename)) {
|
|
debugStatic(filename, 'success');
|
|
return filename;
|
|
}
|
|
else {
|
|
debugStatic(filename, 'fail');
|
|
}
|
|
},
|
|
});
|
|
const viteServePublicMiddlewareIndex = server.middlewares.stack.findIndex((middleware) => {
|
|
return (middleware.handle.name === 'viteServePublicMiddleware');
|
|
});
|
|
// 替换 vite 自带的 public middleware
|
|
if (viteServePublicMiddlewareIndex > -1) {
|
|
server.middlewares.stack.splice(viteServePublicMiddlewareIndex, 1, {
|
|
route: '',
|
|
handle: ((req, res, next) => {
|
|
if ((0, uni_cli_shared_1.isImportRequest)(req.url) || (0, uni_cli_shared_1.isInternalRequest)(req.url)) {
|
|
return next();
|
|
}
|
|
return serve(req, res, next);
|
|
}),
|
|
});
|
|
}
|
|
};
|
|
exports.initStatic = initStatic;
|
|
function createPublicFileFilter(base = '/') {
|
|
const publicDir = (0, uni_cli_shared_1.normalizePath)(path_1.default.join(base, uni_cli_shared_1.PUBLIC_DIR + '/**/*'));
|
|
const uniModulesDir = (0, uni_cli_shared_1.normalizePath)(path_1.default.join(base, 'uni_modules/*/' + uni_cli_shared_1.PUBLIC_DIR + '/**/*'));
|
|
return (0, pluginutils_1.createFilter)([publicDir, uniModulesDir]);
|
|
}
|
|
exports.createPublicFileFilter = createPublicFileFilter;
|