static.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.createPublicFileFilter = exports.initStatic = void 0;
  7. const fs_1 = __importDefault(require("fs"));
  8. const path_1 = __importDefault(require("path"));
  9. const debug_1 = __importDefault(require("debug"));
  10. const pluginutils_1 = require("@rollup/pluginutils");
  11. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  12. const static_1 = require("./middlewares/static");
  13. const debugStatic = (0, debug_1.default)('uni:static');
  14. /**
  15. * devServer时提供static等目录的静态资源服务
  16. * @param server
  17. * @param param
  18. */
  19. const initStatic = (server) => {
  20. const filter = createPublicFileFilter();
  21. const serve = (0, static_1.uniStaticMiddleware)({
  22. etag: true,
  23. resolve(pathname) {
  24. if (!filter(pathname)) {
  25. return;
  26. }
  27. const filename = path_1.default.join(process.env.UNI_INPUT_DIR, pathname);
  28. if (fs_1.default.existsSync(filename)) {
  29. debugStatic(filename, 'success');
  30. return filename;
  31. }
  32. else {
  33. debugStatic(filename, 'fail');
  34. }
  35. },
  36. });
  37. const viteServePublicMiddlewareIndex = server.middlewares.stack.findIndex((middleware) => {
  38. return (middleware.handle.name === 'viteServePublicMiddleware');
  39. });
  40. // 替换 vite 自带的 public middleware
  41. if (viteServePublicMiddlewareIndex > -1) {
  42. server.middlewares.stack.splice(viteServePublicMiddlewareIndex, 1, {
  43. route: '',
  44. handle: ((req, res, next) => {
  45. if ((0, uni_cli_shared_1.isImportRequest)(req.url) || (0, uni_cli_shared_1.isInternalRequest)(req.url)) {
  46. return next();
  47. }
  48. return serve(req, res, next);
  49. }),
  50. });
  51. }
  52. };
  53. exports.initStatic = initStatic;
  54. function createPublicFileFilter(base = '/') {
  55. const publicDir = (0, uni_cli_shared_1.normalizePath)(path_1.default.join(base, uni_cli_shared_1.PUBLIC_DIR + '/**/*'));
  56. const uniModulesDir = (0, uni_cli_shared_1.normalizePath)(path_1.default.join(base, 'uni_modules/*/' + uni_cli_shared_1.PUBLIC_DIR + '/**/*'));
  57. return (0, pluginutils_1.createFilter)([publicDir, uniModulesDir]);
  58. }
  59. exports.createPublicFileFilter = createPublicFileFilter;