I like the idea but shouldn't the package.json just specify whether a
client shim is needed or not? It seems too inflexible if you require a
specify shim. The shim or not shim would also depend on the platform,
browser or usage. Might be a can-o-worms...
Andy

Sent from my iPhone

On May 4, 2012, at 10:54 AM, Roman Shtylman <[email protected]> wrote:

> Since node.js code is javascript, many node.js modules have the useful 
> property of being able to be run on client and server side. Using tools like 
> browserify (https://github.com/substack/node-browserify) and script 
> (https://github.com/shtylman/node-script) you can easily package node.js 
> modules for the browser.
>
> However, there is generally one hurdle when doing this. Some modules depend 
> on code or third party modules that are server specific. When bundling (act 
> of preparing for the browser) these modules it would be wrong to include 
> these server only modules. Instead, the bundler tool needs to be able to shim 
> out those 3rd party modules in favor of alternate code which replicates the 
> functionality in the browser. Currently tools like browserify and script 
> allow you to do this manually in your code. This is error prone as you have 
> to know the dependencies for any thrid party modules you use and track if you 
> need to shim them out or not. Instead I propose that we "standardize" and put 
> this information into the package.json file so that any such bundling tool 
> (and other tools) will know that when the code is bound for a browser, 
> certain modules should be replaced.
>
> Imagine a package.json with the following dependencies:
>
> "dependencies": {
>     "ws": "x.x.x",
>     "some_native_module": "x.x.x",
>     "pure_js_module": "x.x.x"
> }
>
> The module author would now be able to provide the following additional 
> section (if needed):
>
> "shims": {
>     "ws": "./shims/ws.js",
>     "some_native_module": "./shims/something.js"
> }
>
> This would be entirely optional but it would allow modules that have no 
> technical impediment to working in the client and server to be bundled 
> easier. I think this would be a useful addition since all the code is 
> javascript and we as module authors can benefit and help others by 
> recognizing and making it easier to use all of this new code in both 
> environments.
>
> If you want to try this out, the wip-shim branch for script 
> (https://github.com/shtylman/node-script/commits/wip-shim) has a working 
> implementation. I hope other bundling tools jump on board :)
>
> Thoughts? Terrible? Useless? Wonderful?
>

Reply via email to