Skip to content

Commit 9ae3f4a

Browse files
authored
Merge pull request #98 from danielmoore/emit-on-pack
Emit on pack stage of pipeline
2 parents 482a5b8 + 06268d7 commit 9ae3f4a

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

index.js

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var FileSystemLoader = require('./file-system-loader');
99
var assign = require('object-assign');
1010
var stringHash = require('string-hash');
1111
var 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+
242254
module.exports.generateShortName = generateShortName;
243255
module.exports.generateLongName = generateLongName;

0 commit comments

Comments
 (0)