@@ -5,6 +5,7 @@ var Core = require('css-modules-loader-core');
55var FileSystemLoader = require ( 'css-modules-loader-core/lib/file-system-loader' ) ;
66var assign = require ( 'object-assign' ) ;
77var stringHash = require ( 'string-hash' ) ;
8+ var ReadableStream = require ( 'stream' ) . Readable ;
89
910
1011/*
@@ -96,10 +97,6 @@ module.exports = function (browserify, options) {
9697 if ( ! rootDir ) { rootDir = process . cwd ( ) ; }
9798
9899 var cssOutFilename = options . output || options . o ;
99- if ( ! cssOutFilename ) {
100- throw new Error ( 'css-modulesify needs the --output / -o option (path to output css file)' ) ;
101- }
102-
103100 var jsonOutFilename = options . json || options . jsonOutput ;
104101
105102 // PostCSS plugins passed to FileSystemLoader
@@ -143,6 +140,10 @@ module.exports = function (browserify, options) {
143140 return plugin ;
144141 } ) ;
145142
143+ // the compiled CSS stream needs to be avalible to the transform,
144+ // but re-created on each bundle call.
145+ var compiledCssStream ;
146+
146147 function transform ( filename ) {
147148 // only handle .css files
148149 if ( ! cssExt . test ( filename ) ) {
@@ -164,6 +165,8 @@ module.exports = function (browserify, options) {
164165 // store this file's source to be written out to disk later
165166 sourceByFile [ filename ] = loader . finalSource ;
166167
168+ compiledCssStream . push ( loader . finalSource ) ;
169+
167170 self . queue ( output ) ;
168171 self . queue ( null ) ;
169172 } , function ( err ) {
@@ -177,17 +180,32 @@ module.exports = function (browserify, options) {
177180 } ) ;
178181
179182 browserify . on ( 'bundle' , function ( bundle ) {
183+ // on each bundle, create a new stream b/c the old one might have ended
184+ compiledCssStream = new ReadableStream ( ) ;
185+ compiledCssStream . _read = function ( ) { } ;
186+
187+ bundle . emit ( 'css stream' , compiledCssStream ) ;
188+
180189 bundle . on ( 'end' , function ( ) {
181190 // Combine the collected sources into a single CSS file
182- var css = Object . keys ( sourceByFile ) . map ( function ( file ) {
183- return sourceByFile [ file ] ;
184- } ) . join ( '\n' ) ;
185-
186- fs . writeFile ( cssOutFilename , css , function ( err ) {
187- if ( err ) {
188- browserify . emit ( 'error' , err ) ;
189- }
190- } ) ;
191+ var files = Object . keys ( sourceByFile ) ;
192+ var css ;
193+
194+ // end the output stream
195+ compiledCssStream . push ( null ) ;
196+
197+ // write the css file
198+ if ( cssOutFilename ) {
199+ css = files . map ( function ( file ) {
200+ return sourceByFile [ file ] ;
201+ } ) . join ( '\n' ) ;
202+
203+ fs . writeFile ( cssOutFilename , css , function ( err ) {
204+ if ( err ) {
205+ browserify . emit ( 'error' , err ) ;
206+ }
207+ } ) ;
208+ }
191209
192210 // write the classname manifest
193211 if ( jsonOutFilename ) {
0 commit comments