reactjs - Vite, MSW och basename
Jag har konfigurerat Vite för att fungera med MSW för att avlyssna mina förfrågningar, hittills inga problem med detta. Filen mockServiceWorker.js finns i mappen public. Dock behövde jag lägga till en egenskap i min vite.config.ts som heter base:
vite.config.ts
export default defineConfig({
base: '/kiosk',
...other configs...
Med detta lade jag också till den nödvändiga egenskapen i package.json:
package.json
"homepage": "/kiosk",
...other configs...
Detta har brutit MSW-funktionaliteten, och det fångar inte upp någon förfrågan.
Detta är vad jag för närvarande har i min MSW-initialiserare.
import { StartOptions } from 'msw/browser';
export const enableMocking = async () => {
if (!import.meta.env.DEV) return;
const { worker } = await import('./browser');
return worker.start(workerStartOptions);
};
const workerStartOptions: StartOptions = {
serviceWorker: {
url: '/kiosk/mockServiceWorker.js'
},
};
Och avlyssnar inga förfrågningar, samtidigt som följande meddelande visas i konsolen: `[MSW] Kan inte avlyssna förfrågningar på denna sida eftersom den ligger utanför workerens omfattning ("http://localhost:3000/kiosk/"). Om du vill mocka API-förfrågningar på denna sida måste du lösa detta omfattningsproblem.
- (Rekommenderas) Registrera arbetaren på rotnivå ("/") av din applikation.
- Ställ in svarshuvudet "Service-Worker-Allowed" för att tillåta arbetare utanför omfattningen.
Finns det några lösningar för att få MSW att fungera med basvägar? Tack på förhand!
Svar #1
Jag stötte också på detta problem med Vite och MSW, och körde detta:
npx msw init /
Verkade fixa det för mig.
Även om jag inte är helt nöjd med att filen mockServiceWorker.js ligger i mitt projektets rotkatalog.
Det finns en möjlighet att det kan fungera att lägga till rubriken 'Service-Worker-Allowed' till hanterarna.
https://mswjs.io/docs/recipes/custom-worker-script-location/#option-2-service-worker-allowed-response-header
