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