I was thinking if something like mongoose being shimmed. Your example
makes sense. A shim for a database module is very much up to the
system architecture. Shimming something like crypto really makes sense
in your design. So i agree to lean toward it being a good idea. Just
needs some exception (maybe plugin ability.)
Andy

Sent from my iPhone

On May 4, 2012, at 11:37 AM, Roman Shtylman <shtyl...@gmail.com> wrote:

>
> I think specifying a particular shim in the package.json file is useful since 
> more eyeballs will result in better cross browser support and testing for the 
> particular shim. If you have to write the shim code yourself, you need to 
> know more inner workings about the module.
>
> You would still be able to override those shims with your own if you desired 
> but at least this way it would have a better chance of working out of the box.
>
> On May 4, 2012, at 11:26 AM, Andreas Richter wrote:
>
>> 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 <shtyl...@gmail.com> 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