@@ -24,6 +24,7 @@ function publishCourse(courseId, mode, request, response, next) {
2424 let tenantId = user . tenant . _id ;
2525 let outputJson = { } ;
2626 let isRebuildRequired = false ;
27+ let isProductionBuild = true ;
2728 let themeName ;
2829 let menuName ;
2930 let frameworkVersion ;
@@ -364,6 +365,7 @@ function publishCourse(courseId, mode, request, response, next) {
364365
365366 var generateSourcemap = outputJson . config . _generateSourcemap ;
366367 var buildMode = generateSourcemap === true ? 'dev' : 'prod' ;
368+ isProductionBuild = buildMode === 'prod' ;
367369
368370 logger . log ( 'info' , 'npx grunt server-build:' + buildMode + ' ' + args . join ( ' ' ) ) ;
369371
@@ -427,7 +429,22 @@ function publishCourse(courseId, mode, request, response, next) {
427429 callback ( err ) ;
428430 } ) ;
429431 archive . pipe ( output ) ;
430- archive . glob ( '**/*' , { cwd : path . join ( BUILD_FOLDER ) } ) ;
432+ // Exclude unnecessary files to optimize SCORM package size:
433+ // - selection.json: IcoMoon project file, not needed at runtime
434+ // - react-dom.development.js: excluded only for prod builds; dev builds
435+ // (_generateSourcemap === true) need it as scriptLoader loads the dev bundle
436+ // - .ttf fonts: only needed for legacy browsers (IE9/Android 4.x)
437+ var ignorePatterns = [
438+ '**/selection.json' ,
439+ '**/*.ttf'
440+ ] ;
441+ if ( isProductionBuild ) {
442+ ignorePatterns . push ( '**/react-dom.development.js' ) ;
443+ }
444+ archive . glob ( '**/*' , {
445+ cwd : path . join ( BUILD_FOLDER ) ,
446+ ignore : ignorePatterns
447+ } ) ;
431448 archive . finalize ( ) ;
432449 } ,
433450 // fetch and register deployment URLs
0 commit comments