Service Worker without PWA capabilities 
Sometimes you don't need the full blown PWA functionality like offline cache and manifest file, but need simple custom Service Worker.
You can disable all vite-plugin-pwa supported features, and use it just to manage your Service Worker file.
Service Worker code 
Suppose you want to have a Service Worker file that captures browser fetch:
// src/service-worker.js or src/service-worker.ts
self.addEventListener("fetch", (event) => {
  event.respondWith(fetch(event.request));
});// src/service-worker.js or src/service-worker.ts
self.addEventListener("fetch", (event) => {
  event.respondWith(fetch(event.request));
});You would like to have this service worker reloaded on each change in development and prepared for production.
Plugin Configuration 
You should configure vite-plugin-pwa plugin options in your Vite configuration file with the following options:
// vite.config.js or vite.config.ts
VitePWA({
  srcDir: "src",
  filename: "service-worker.js",
  strategies: "injectManifest",
  injectRegister: false,
  manifest: false,
  injectManifest: {
    injectionPoint: null,
  },
})// vite.config.js or vite.config.ts
VitePWA({
  srcDir: "src",
  filename: "service-worker.js",
  strategies: "injectManifest",
  injectRegister: false,
  manifest: false,
  injectManifest: {
    injectionPoint: null,
  },
})Development 
If you would like the service worker to run in development, make sure to enable it in the devOptions and to set the type to module if required.
Registering of the Service Worker in your app 
Use the code below in your entry point module:
// src/main.js or src/main.ts
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register(
    import.meta.env.MODE === 'production' ? '/service-worker.js' : '/dev-sw.js?dev-sw'
  )
}// src/main.js or src/main.ts
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register(
    import.meta.env.MODE === 'production' ? '/service-worker.js' : '/dev-sw.js?dev-sw'
  )
}If you're using import statements inside your service worker (will work only on chromium based browsers) check injectManifest section for more info:
// src/main.js or src/main.ts
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register(
    import.meta.env.MODE === 'production' ? '/service-worker.js' : '/dev-sw.js?dev-sw',
    { type: import.meta.env.MODE === 'production' ? 'classic' : 'module' }
  )
}// src/main.js or src/main.ts
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register(
    import.meta.env.MODE === 'production' ? '/service-worker.js' : '/dev-sw.js?dev-sw',
    { type: import.meta.env.MODE === 'production' ? 'classic' : 'module' }
  )
}