@@ -9,6 +9,7 @@ var FileSystemLoader = require('./file-system-loader');
99var assign = require ( 'object-assign' ) ;
1010var stringHash = require ( 'string-hash' ) ;
1111var ReadableStream = require ( 'stream' ) . Readable ;
12+ var through = require ( 'through' ) ;
1213
1314/*
1415 Custom `generateScopedName` function for `postcss-modules-scope`.
@@ -123,7 +124,7 @@ module.exports = function (browserify, options) {
123124 return name ;
124125 }
125126
126- var plugin = require ( require . resolve ( name ) ) ;
127+ var plugin = module . parent . require ( name ) ;
127128
128129 // custom scoped name generation
129130 if ( name === 'postcss-modules-scope' ) {
@@ -207,37 +208,48 @@ module.exports = function (browserify, options) {
207208
208209 browserify . emit ( 'css stream' , compiledCssStream ) ;
209210
210- bundle . on ( 'end' , function ( ) {
211+ browserify . pipeline . get ( 'pack' ) . push ( through ( null , function ( ) {
211212 // Combine the collected sources for a single bundle into a single CSS file
213+ var self = this ;
212214 var loader = loadersByFile [ cssOutFilename ] ;
213215 var css = loader . finalSource ;
214216
215217 // end the output stream
216218 compiledCssStream . push ( css ) ;
217219 compiledCssStream . push ( null ) ;
218220
221+ const writes = [ ] ;
222+
219223 // write the css file
220224 if ( cssOutFilename ) {
221- fs . writeFile ( cssOutFilename , css , function ( err ) {
222- if ( err ) {
223- browserify . emit ( 'error' , err ) ;
224- }
225- } ) ;
225+ writes . push ( writeFile ( cssOutFilename , css ) ) ;
226226 }
227227
228228 // write the classname manifest
229229 if ( jsonOutFilename ) {
230- fs . writeFile ( jsonOutFilename , JSON . stringify ( normalizeManifestPaths ( tokensByFile , rootDir ) ) , function ( err ) {
231- if ( err ) {
232- browserify . emit ( 'error' , err ) ;
233- }
234- } ) ;
230+ writes . push ( writeFile ( jsonOutFilename , JSON . stringify ( normalizeManifestPaths ( tokensByFile , rootDir ) ) ) ) ;
235231 }
236- } ) ;
232+
233+ Promise . all ( writes )
234+ . then ( function ( ) { self . queue ( null ) ; } )
235+ . catch ( function ( err ) { self . emit ( 'error' , err ) ; } )
236+ } ) ) ;
237237 } ) ;
238238
239+
239240 return browserify ;
240241} ;
241242
243+ function writeFile ( filename , content ) {
244+ return new Promise ( function ( resolve , reject ) {
245+ fs . writeFile ( filename , content , function ( err ) {
246+ if ( err )
247+ reject ( err ) ;
248+ else
249+ resolve ( ) ;
250+ } ) ;
251+ } ) ;
252+ }
253+
242254module . exports . generateShortName = generateShortName ;
243255module . exports . generateLongName = generateLongName ;
0 commit comments