+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/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.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
>
> 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
>
> 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

Reply via email to