@@ -13,8 +13,6 @@ function poLoader() {
1313 transform ( code , id ) {
1414 if ( ! id . endsWith ( ".po" ) ) return null ;
1515 const po = gettextParser . po . parse ( code ) ;
16- // i18next expects a simple key/value map;
17- // adjust to your exact structure if needed.
1816 const out = { } ;
1917 for ( const ctx of Object . values ( po . translations ) ) {
2018 for ( const [ key , val ] of Object . entries ( ctx ) ) {
@@ -23,10 +21,18 @@ function poLoader() {
2321 out [ key ] = msg ;
2422 }
2523 }
26- return {
27- code : `export default ${ JSON . stringify ( out ) } ;` ,
28- map : null ,
29- } ;
24+ return { code : `export default ${ JSON . stringify ( out ) } ;` , map : null } ;
25+ } ,
26+ } ;
27+ }
28+
29+ // --- force a hard reload for every change (no module-level HMR)
30+ function forceFullReload ( ) {
31+ return {
32+ name : "force-full-reload" ,
33+ handleHotUpdate ( ctx ) {
34+ ctx . server . ws . send ( { type : "full-reload" } ) ;
35+ return [ ] ; // prevent Vite from doing module HMR
3036 } ,
3137 } ;
3238}
@@ -38,20 +44,13 @@ const input = {
3844 landing : path . resolve ( __dirname , "assets/js/landing.js" ) ,
3945 external : path . resolve ( __dirname , "assets/js/external.js" ) ,
4046 styles : path . resolve ( __dirname , "assets/css/style.scss" ) ,
41- // broadcast_editor: path.resolve(
42- // __dirname,
43- // "assets/js/widgets/pages/broadcast-editor/index.js",
44- // ),
45- // stream: path.resolve(
46- // __dirname,
47- // "assets/js/widgets/pages/broadcast-editor/stream.js",
48- // ),
47+ // broadcast_editor: path.resolve(__dirname, "assets/js/widgets/pages/broadcast-editor/index.js"),
48+ // stream: path.resolve(__dirname, "assets/js/widgets/pages/broadcast-editor/stream.js"),
4949} ;
5050
5151export default defineConfig ( ( { command, mode } ) => ( {
52- define : {
53- gon : "window.gon" ,
54- } ,
52+ define : { gon : "window.gon" } ,
53+
5554 css : {
5655 preprocessorOptions : {
5756 scss : {
@@ -64,29 +63,25 @@ export default defineConfig(({ command, mode }) => ({
6463 generateScopedName : "[local]_[hash:base64:4]" ,
6564 } ,
6665 } ,
66+
6767 plugins : [
68- react ( ) ,
68+ react ( { fastRefresh : false } ) , // no react-refresh preamble
6969 poLoader ( ) ,
70- // makes process.env.* defined (stringified) if your code references it
70+ forceFullReload ( ) , // always trigger full reload
7171 environment ( [ "NODE_ENV" ] ) ,
7272 ] ,
7373
74- root : "." , // project root
74+ root : "." ,
7575 base : command === "serve" ? "/" : "/assets/" ,
76- // keep the rest of your config
7776
78- // where Phoenix serves from in production:
7977 build : {
8078 outDir : "priv/static/assets" ,
81- assetsDir : "" , // keep flat (so your [name].css/js stay at /assets/)
82- manifest : true , // needed for Phoenix helper
79+ assetsDir : "" ,
80+ manifest : true ,
8381 sourcemap : mode === "development" ,
8482 rollupOptions : {
8583 input,
86- // (optional) put monaco in a separate chunk
87- output : {
88- manualChunks : { monaco : [ "monaco-editor" ] } ,
89- } ,
84+ output : { manualChunks : { monaco : [ "monaco-editor" ] } } ,
9085 } ,
9186 emptyOutDir : true ,
9287 } ,
@@ -101,18 +96,20 @@ export default defineConfig(({ command, mode }) => ({
10196 ] ,
10297 } ,
10398
104- // Vite dev server (replaces webpack-dev-server on :8080)
99+ // Dev server
105100 server : {
106101 host : "0.0.0.0" ,
107102 port : 8080 ,
108103 strictPort : true ,
109104 cors : true ,
110- hmr : { host : "localhost" , protocol : "ws" } ,
105+ // HMR must be enabled so the browser receives the "full-reload" message
106+ hmr : { host : "localhost" , protocol : "ws" , port : 8080 } ,
107+ // If developing inside Docker and file changes aren't detected, uncomment:
108+ // watch: { usePolling: true, interval: 100 },
111109 } ,
112110
113111 resolve : {
114112 alias : {
115- // keep your Webpack aliases
116113 gon : path . resolve ( __dirname , "assets/js/shims/gon.js" ) ,
117114 "@/" : path . resolve ( __dirname , "assets/js/widgets" ) ,
118115 "@/components" : path . resolve ( __dirname , "assets/js/widgets/components" ) ,
@@ -124,14 +121,10 @@ export default defineConfig(({ command, mode }) => ({
124121 "@/selectors" : path . resolve ( __dirname , "assets/js/widgets/selectors" ) ,
125122 "@/slices" : path . resolve ( __dirname , "assets/js/widgets/slices" ) ,
126123 "@/utils" : path . resolve ( __dirname , "assets/js/widgets/utils" ) ,
127-
128- // your old ProvidePlugin fallbacks
129124 path : "path-browserify" ,
130125 } ,
131126 extensions : [ ".js" , ".jsx" , ".ts" , ".tsx" ] ,
132127 } ,
133128
134- // Copy static assets like CopyWebpackPlugin:
135- // Place files in ./assets/static — Vite copies that to outDir at build.
136129 publicDir : "assets/static" ,
137130} ) ) ;
0 commit comments