@@ -114,68 +114,12 @@ export default class Server {
114114 await this . serveStatic ( req , res , p )
115115 } ,
116116
117- // This is to support, webpack dynamic imports in production.
118- '/_next/webpack/chunks/:name' : async ( req , res , params ) => {
119- res . setHeader ( 'Cache-Control' , 'max-age=365000000, immutable' )
120- const p = join ( this . dir , this . dist , 'chunks' , params . name )
121- await this . serveStatic ( req , res , p )
122- } ,
123-
124- // This is to support, webpack dynamic import support with HMR
125- '/_next/webpack/:id' : async ( req , res , params ) => {
126- const p = join ( this . dir , this . dist , 'chunks' , params . id )
127- await this . serveStatic ( req , res , p )
128- } ,
129-
130- '/_next/:hash/manifest.js' : async ( req , res , params ) => {
131- if ( ! this . dev ) return this . send404 ( res )
132-
133- this . handleBuildHash ( 'manifest.js' , params . hash , res )
134- const p = join ( this . dir , this . dist , 'manifest.js' )
135- await this . serveStatic ( req , res , p )
136- } ,
137-
138- '/_next/:hash/main.js' : async ( req , res , params ) => {
139- if ( ! this . dev ) return this . send404 ( res )
140-
141- this . handleBuildHash ( 'main.js' , params . hash , res )
142- const p = join ( this . dir , this . dist , 'main.js' )
143- await this . serveStatic ( req , res , p )
144- } ,
145-
146- '/_next/:hash/commons.js' : async ( req , res , params ) => {
147- if ( ! this . dev ) return this . send404 ( res )
148-
149- this . handleBuildHash ( 'commons.js' , params . hash , res )
150- const p = join ( this . dir , this . dist , 'commons.js' )
151- await this . serveStatic ( req , res , p )
152- } ,
153-
154- '/_next/:hash/app.js' : async ( req , res , params ) => {
155- if ( this . dev ) return this . send404 ( res )
156-
157- this . handleBuildHash ( 'app.js' , params . hash , res )
158- const p = join ( this . dir , this . dist , 'app.js' )
159- await this . serveStatic ( req , res , p )
160- } ,
161-
162- '/_next/:buildId/page/_error*' : async ( req , res , params ) => {
163- if ( ! this . handleBuildId ( params . buildId , res ) ) {
164- const error = new Error ( 'INVALID_BUILD_ID' )
165- const customFields = { buildIdMismatched : true }
166-
167- return await renderScriptError ( req , res , '/_error' , error , customFields , this . renderOpts )
168- }
169-
170- const p = join ( this . dir , `${ this . dist } /bundles/pages/_error.js` )
171- await this . serveStatic ( req , res , p )
172- } ,
173-
174- '/_next/:buildId/page/:path*' : async ( req , res , params ) => {
117+ '/_next/:hash/page/:path*' : async ( req , res , params ) => {
175118 const paths = params . path || [ '' ]
176119 const page = `/${ paths . join ( '/' ) } `
120+ const filename = `pages/${ page . replace ( / \. j s $ / , '' ) } .js`
177121
178- if ( ! this . handleBuildId ( params . buildId , res ) ) {
122+ if ( ! this . handleBuildHash ( filename , params . hash , res ) ) {
179123 const error = new Error ( 'INVALID_BUILD_ID' )
180124 const customFields = { buildIdMismatched : true }
181125
@@ -199,6 +143,20 @@ export default class Server {
199143 await renderScript ( req , res , page , this . renderOpts )
200144 } ,
201145
146+ '/_next/:hash/:name' : async ( req , res , params ) => {
147+ if ( ! this . dev ) return this . send404 ( res )
148+
149+ if ( ! this . handleBuildHash ( params . name , params . hash , res ) ) {
150+ const error = new Error ( 'INVALID_BUILD_ID' )
151+ const customFields = { buildIdMismatched : true }
152+
153+ return await renderScriptError ( req , res , params . name , error , customFields , this . renderOpts )
154+ }
155+
156+ const p = join ( this . dir , this . dist , 'bundles' , params . name )
157+ await this . serveStatic ( req , res , p )
158+ } ,
159+
202160 // It's very important keep this route's param optional.
203161 // (but it should support as many as params, seperated by '/')
204162 // Othewise this will lead to a pretty simple DOS attack.
@@ -379,16 +337,6 @@ export default class Server {
379337 return buildId . trim ( )
380338 }
381339
382- handleBuildId ( buildId , res ) {
383- if ( this . dev ) return true
384- if ( buildId !== this . renderOpts . buildId ) {
385- return false
386- }
387-
388- res . setHeader ( 'Cache-Control' , 'max-age=365000000, immutable' )
389- return true
390- }
391-
392340 async getCompilationError ( ) {
393341 if ( ! this . hotReloader ) return
394342
@@ -400,13 +348,15 @@ export default class Server {
400348 }
401349
402350 handleBuildHash ( filename , hash , res ) {
403- if ( this . dev ) return
351+ if ( this . dev ) return true
404352
405- if ( hash !== this . buildStats [ filename ] . hash ) {
406- throw new Error ( `Invalid Build File Hash(${ hash } ) for chunk: ${ filename } ` )
353+ if ( hash !== this . renderOpts . buildId &&
354+ hash !== ( this . buildStats [ filename ] || { } ) . hash ) {
355+ return false
407356 }
408357
409358 res . setHeader ( 'Cache-Control' , 'max-age=365000000, immutable' )
359+ return true
410360 }
411361
412362 send404 ( res ) {
0 commit comments