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