22Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
33exports . PreserveModuleNamePlugin = exports . preserveModuleName = void 0 ;
44const path = require ( "path" ) ;
5+ const Webpack = require ( "webpack" ) ;
56const logger_1 = require ( "./logger" ) ;
67exports . preserveModuleName = Symbol ( ) ;
78const TAP_NAME = "Aurelia:PreserveModuleName" ;
@@ -16,6 +17,13 @@ class PreserveModuleNamePlugin {
1617 this . isDll = isDll ;
1718 }
1819 apply ( compiler ) {
20+ // Override NormalModule serializer: "preserveModuleName" should be serialized
21+ // to ensure correct module serialization of conventional dependencies (ConventionDependenciesPlugin)
22+ // when "webpack filesystem cache" is enabled, https://github.com/aurelia/webpack-plugin/issues/199
23+ const isFilesystemCacheEnabled = typeof ( compiler . options . cache ) == 'object' && compiler . options . cache . type == 'filesystem' ;
24+ if ( isFilesystemCacheEnabled ) {
25+ overrideNormalModuleSerializer ( ) ;
26+ }
1927 compiler . hooks . compilation . tap ( TAP_NAME , compilation => {
2028 compilation . hooks . beforeModuleIds . tap ( TAP_NAME , $modules => {
2129 let modules = Array . from ( $modules ) ;
@@ -177,3 +185,23 @@ function removeLoaders(request) {
177185 let lastBang = request . lastIndexOf ( "!" ) ;
178186 return lastBang < 0 ? request : request . substr ( lastBang + 1 ) ;
179187}
188+ let overridden = false ;
189+ function overrideNormalModuleSerializer ( ) {
190+ if ( overridden ) {
191+ return ;
192+ }
193+ overridden = true ;
194+ const originalSerialize = Webpack . NormalModule . prototype . serialize ;
195+ Webpack . NormalModule . prototype . serialize = function ( context ) {
196+ context . write ( this [ exports . preserveModuleName ] ) ;
197+ originalSerialize . call ( this , context ) ;
198+ } ;
199+ const originalDeserialize = Webpack . NormalModule . prototype . deserialize ;
200+ Webpack . NormalModule . prototype . deserialize = function ( context ) {
201+ const preserve = context . read ( ) ;
202+ if ( preserve ) {
203+ this [ exports . preserveModuleName ] = preserve ;
204+ }
205+ originalDeserialize . call ( this , context ) ;
206+ } ;
207+ }
0 commit comments