-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue with broken dep #61
Comments
@RichardLitt The stream you're returning from this gulp task finishes first, and gulp exits, The other streams are still being written, and what the fs sink has buffered is written out, but not the rest. Do you really need to use gulp for this? It would be much simpler if you didn't. |
Thanks @terinjokes. What other streams are still being written? I thought this was all essentially one stream. Gulp is used along with Watchify for a lot of other processes in my dev pipeline. I think it would be more awkward if I didn't use it. I may be wrong; here's the file I use. |
@RichardLitt The other streams created by factor-bundle are outside of your Gulp stream. I was bitten by this too. |
Ahh. Can you help me by showing your solution? |
With Gulp, you pretty much can't rely on the files being written. It's been a while since I investigated as due to a bug I've been unable to get factor-bundle to work reliably on Windows (which half of my team uses). The only way I thought it may be possible (but was unable to get it working at the time, mind you, this was about 9 months ago) is if you can catch an event and pass it up the pipeline - and use that to "complete" the Gulp task. However, I was unsuccessful and I needed to move on: #20 |
I have an example from work I can clean up and provide tomorrow. Pretty much you need to combine the factor-bundle streams with the main browserify stream. |
Thanks @terinjokes! That'd be awesome. |
+1 @terinjokes I'm encountering the same issue with gulp. Do you have that example? |
I've got the same issue also, using factor-bundle with gulp. Not convinced it is a gulp issue. This is with:
|
Is this definitely a different issue from #51 ? |
I have a similar issue; @terinjokes could you show that example you mentioned? |
@terinjokes would appreciate seeing that example as well. |
For those interested, what you really need to know is when all of the So if Object.keys(pipelines).forEach(function (id, ix) {
b.emit('factor.pipeline', id, pipelines[id], outputs[ix]);
}); then you'd have a mechanism to listen outside of var ps = [];
b.on('factor.pipeline', function (file, pipeline, output) {
ps.push(pipeline);
output.on('finish', function () {
ps.pop();
if (!ps.length) cb(); // now all factor bundles are complete
});
}); However, this isn't very stream-y. As for what @terinjokes said:
that's where my limited streams experience is throwing me, as I'm at a loss as to what to push into the browserify pipeline such that it only emits and Any suggestions? |
I'm running into a similar issue with knowing when function makeWriteStream(filename) {
return fs.createWriteStream(filename).
on('finish', function () {
console.log('Finished writing ' + filename);
};
}
var b = browserify(inputFiles);
b.plugin(factor, { outputs: inputFiles.map(makeWriteStream) });
b.bundle().pipe(makeWriteStream('common.js')); That, while not particularly stream-y, at least gives you a hook to know when all files are done writing. Unfortunately, I've discovered that you never get the 'finish' (or 'unpipe') event on factor-bundle's streams if a browserify error occurs (for example, a syntax error in the JS you're trying to bundle). I've written a failing test here: master...islemaster:streams-dont-close |
FWIW @islemaster, I'm using this slight fork of |
This sure comes late, but may help others or to create a built-in solution I found myself with the commented problem about the ending of factorized streams, but I tried listening to the I found this issue because of the common problem of don't know when an error happens, breaking all streams, but I have a solution now. It's possible to listen to an browserify.on('bundle', function(output) {
output.on('error', function(err) {
// Stop task, warn about error
grunt.verbose.error().error(err);
grunt.fail.warn('Browserify bundle error: ' + err.toString());
});
}); That will throw on errors that I think happens before factor-bundle creates streams. Additionally, I listen to I'm using Grunt, not Gulp, then the full set-up is completely different, but here is a link to the full code just for reference: grunt/browserify.js snapshot Just a question/idea for maintainers: would be possible to add an API to factor-bundle to simplify all this? Maybe make it emits events at the 'browserify' instance for streams completion and bundle-error, or pause the main stream until the factorized streams ends. |
I am using browserify with brfs in a Chrome extension. My gulpfile looks like this:
In the bundle loaded into the Chrome extension, I have a
viewer.html
page, into which I have plopped:In place of the previously working
bundle.min.js
. Now, however, on load,main.min.js
no longer works, throwing aUncaught TypeError: Cannot read property '0' of undefined
error. The line it points to looks like this:I'm afraid I have no idea why this is happening, at all, to the point of not knowing how to even name this issue. I'm going to go back to not using factor-bundle for now. I'll have keep this issue in a branch, but I'm stumped.
The text was updated successfully, but these errors were encountered: