147 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			147 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# browser-resolve [](https://travis-ci.org/defunctzombie/node-browser-resolve)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								node.js resolve algorithm with [browser field](https://github.com/defunctzombie/package-browser-field-spec) support.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## api
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### resolve(id, opts={}, cb)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Resolve a module path and call `cb(err, path [, pkg])`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* `basedir` - directory to begin resolving from
							 | 
						||
| 
								 | 
							
								* `browser` - the 'browser' property to use from package.json (defaults to 'browser')
							 | 
						||
| 
								 | 
							
								* `filename` - the calling filename where the `require()` call originated (in the source)
							 | 
						||
| 
								 | 
							
								* `modules` - object with module id/name -> path mappings to consult before doing manual resolution (use to provide core modules)
							 | 
						||
| 
								 | 
							
								* `packageFilter` - transform the parsed `package.json` contents before looking at the `main` field
							 | 
						||
| 
								 | 
							
								* `paths` - `require.paths` array to use if nothing is found on the normal `node_modules` recursive walk
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options supported by [node-resolve](https://github.com/substack/node-resolve#resolveid-opts-cb) can be used.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### resolve.sync(id, opts={})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Same as the async resolve, just uses sync methods.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Options supported by [node-resolve](https://github.com/substack/node-resolve#resolvesyncid-opts) `sync` can be used.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## basic usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								you can resolve files like `require.resolve()`:
							 | 
						||
| 
								 | 
							
								``` js
							 | 
						||
| 
								 | 
							
								var resolve = require('browser-resolve');
							 | 
						||
| 
								 | 
							
								resolve('../', { filename: __filename }, function(err, path) {
							 | 
						||
| 
								 | 
							
								    console.log(path);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ node example/resolve.js
							 | 
						||
| 
								 | 
							
								/home/substack/projects/node-browser-resolve/index.js
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## core modules
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								By default, core modules (http, dgram, etc) will return their same name as the path. If you want to have specific paths returned, specify a `modules` property in the options object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``` js
							 | 
						||
| 
								 | 
							
								var shims = {
							 | 
						||
| 
								 | 
							
								    http: '/your/path/to/http.js'
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var resolve = require('browser-resolve');
							 | 
						||
| 
								 | 
							
								resolve('fs', { modules: shims }, function(err, path) {
							 | 
						||
| 
								 | 
							
								    console.log(path);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ node example/builtin.js
							 | 
						||
| 
								 | 
							
								/home/substack/projects/node-browser-resolve/builtin/fs.js
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## browser field
							 | 
						||
| 
								 | 
							
								browser-specific versions of modules
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``` js
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  "name": "custom",
							 | 
						||
| 
								 | 
							
								  "version": "0.0.0",
							 | 
						||
| 
								 | 
							
								  "browser": {
							 | 
						||
| 
								 | 
							
								    "./main.js": "custom.js"
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  "chromeapp": {
							 | 
						||
| 
								 | 
							
								    "./main.js": "custom-chromeapp.js"
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``` js
							 | 
						||
| 
								 | 
							
								var resolve = require('browser-resolve');
							 | 
						||
| 
								 | 
							
								var parent = { filename: __dirname + '/custom/file.js' /*, browser: 'chromeapp' */ };
							 | 
						||
| 
								 | 
							
								resolve('./main.js', parent, function(err, path) {
							 | 
						||
| 
								 | 
							
								    console.log(path);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ node example/custom.js
							 | 
						||
| 
								 | 
							
								/home/substack/projects/node-browser-resolve/example/custom/custom.js
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## skip
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can skip over dependencies by setting a
							 | 
						||
| 
								 | 
							
								[browser field](https://gist.github.com/defunctzombie/4339901)
							 | 
						||
| 
								 | 
							
								value to `false`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``` json
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  "name": "skip",
							 | 
						||
| 
								 | 
							
								  "version": "0.0.0",
							 | 
						||
| 
								 | 
							
								  "browser": {
							 | 
						||
| 
								 | 
							
								    "tar": false
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This is handy if you have code like:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``` js
							 | 
						||
| 
								 | 
							
								var tar = require('tar');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.add = function (a, b) {
							 | 
						||
| 
								 | 
							
								    return a + b;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.parse = function () {
							 | 
						||
| 
								 | 
							
								    return tar.Parse();
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								so that `require('tar')` will just return `{}` in the browser because you don't
							 | 
						||
| 
								 | 
							
								intend to support the `.parse()` export in a browser environment.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``` js
							 | 
						||
| 
								 | 
							
								var resolve = require('browser-resolve');
							 | 
						||
| 
								 | 
							
								var parent = { filename: __dirname + '/skip/main.js' };
							 | 
						||
| 
								 | 
							
								resolve('tar', parent, function(err, path) {
							 | 
						||
| 
								 | 
							
								    console.log(path);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								$ node example/skip.js
							 | 
						||
| 
								 | 
							
								/home/substack/projects/node-browser-resolve/empty.js
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# license
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								MIT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# upgrade notes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Prior to v1.x this library provided shims for node core modules. These have since been removed. If you want to have alternative core modules provided, use the `modules` option when calling resolve.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This was done to allow package managers to choose which shims they want to use without browser-resolve being the central point of update.
							 |