At first blush decoupling this into fs-browserify makes sense, but ATM the
fork is really for my own convenience / out of necessity. Porting fs to the
browser requires a couple things that aren't currently, to my knowledge,
available in browserify: process.binding support, TypeArrays in Buffer.js /
SlowBuffer port to the browser, and then of course process.binding('fs').
The fs module needs all of these to work. Of course, Substack's not going
to turn down someone porting SlowBuffer to the browser I'm sure, it still
remains to be done, thus the fork.So I suppose the question is really how do we want to do this. Here's the link to the eventual fs-browserify: http://github.com/CrabDude/fs-browserify I've also added an issue to browserify to come up with a convention for process.binding: https://github.com/substack/node-browserify/issues/148 Cheers, Adam On Wed, May 23, 2012 at 3:20 AM, billywhizz <[email protected]> wrote: > +1 for emulating the low level bindings > +1 for making this a project independent of but compatible with browserify > > > On Tuesday, May 22, 2012 8:55:48 PM UTC+1, Adam Crabtree wrote: >> >> Browserify's pretty sweet. Not because of anything special that it's >> doing to make it work (though there's plenty of that to go around), but >> because of what it reveals about the nature of node.js and the implications >> it has for browser-based JavaScript, specifically that node core is heavily >> written in JavaScript. (Shocker I know) >> >> In other words, a lot of core functionality just works with no change in >> the browser like, Streams, util.inherit, path, etc... and several with only >> moderate tweaks like EventEmitter and Buffer. If you don't believe me, just >> compare the files in the following two directories for a possibly >> illuminating experience: >> >> https://github.com/joyent/**node/tree/master/lib<https://github.com/joyent/node/tree/master/lib> >> https://github.com/substack/**node-browserify/blob/master/**builtins/<https://github.com/substack/node-browserify/blob/master/builtins/> >> >> Anywho, I've been playing around with the new FileSystem API in the >> browser recently, >> >> http://www.w3.org/TR/file-**system-api/<http://www.w3.org/TR/file-system-api/> >> http://www.html5rocks.com/en/**tutorials/file/filesystem/<http://www.html5rocks.com/en/tutorials/file/filesystem/> >> >> but I can't shake just how unpleasant it is compared with node's, which >> got me thinking, how much work would it take to port fs to the browser? It >> turns out, the answer is simultaneously not much, and quite a lot actually. >> Let me explain... >> >> Since fs.js is written entirely in JavaScript, and since node doesn't >> augment V8, porting fs to the browser requires only that we to port the >> node C++ bindings utilized in fs.js and add process.binding support to >> browserify. Though I haven't gone too far in depth yet, it seems quite >> doable. The bindings are exposed via `process.binding('fs')`. See the >> following thread: >> >> https://groups.google.com/**group/nodejs-dev/browse_**thread/thread/** >> 5699149204ed0445/**fc280b6509b57cc6?lnk=gst&q=** >> browser+fs#fc280b6509b57cc6<https://groups.google.com/group/nodejs-dev/browse_thread/thread/5699149204ed0445/fc280b6509b57cc6?lnk=gst&q=browser+fs#fc280b6509b57cc6> >> >> For convenience, I've copied the list of functions and constants needing >> to be ported here: >> >> // from process.binding('fs') >> [ 'Stats', >> 'close', >> 'open', >> 'read', >> 'fdatasync', >> 'fsync', >> 'rename', >> 'truncate', >> 'rmdir', >> 'mkdir', >> 'sendfile', >> 'readdir', >> 'stat', >> 'lstat', >> 'fstat', >> 'link', >> 'symlink', >> 'readlink', >> 'unlink', >> 'write', >> 'chmod', >> 'fchmod', >> 'chown', >> 'fchown', >> 'utimes', >> 'futimes', >> 'StatWatcher' ] >> >> // from process.binding('constants') >> { >> O_RDONLY: 0, >> O_WRONLY: 1, >> O_RDWR: 2, >> S_IFMT: 61440, >> S_IFREG: 32768, >> S_IFDIR: 16384, >> S_IFCHR: 8192, >> S_IFBLK: 24576, >> S_IFIFO: 4096, >> S_IFLNK: 40960, >> S_IFSOCK: 49152, >> O_CREAT: 512, >> O_EXCL: 2048, >> O_NOCTTY: 131072, >> O_TRUNC: 1024, >> O_APPEND: 8, >> O_DIRECTORY: 1048576, >> O_NOFOLLOW: 256, >> O_SYNC: 128, >> O_SYMLINK: 2097152 >> >> } >> >> So the question to the community is.... >> >> >> Who's with me?! =D >> >> >> For the curious, Substack's on board with including the eventual >> (assuming it works) builtin into browserify. >> >> My fork of node-browserify for fs.js development (to eventually submit a >> pull request) (there's nothing there yet): >> http://github.com/CrabDude/**node-browserify<http://github.com/CrabDude/node-browserify> >> >> I'm also interested in porting the zlib module to the browser as well, >> but that's another thing entirely. >> >> Cheers, >> Adam Crabtree >> >> -- >> Better a little with righteousness >> than much gain with injustice. >> Proverbs 16:8 >> > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > -- Better a little with righteousness than much gain with injustice. Proverbs 16:8 -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en
