Skip to content
This repository has been archived by the owner on Aug 4, 2021. It is now read-only.

Commit

Permalink
Merge pull request #1 from mislav/mislav/fix-browser-resolve-regressions
Browse files Browse the repository at this point in the history
Respect `browser` field configuration in case of implicit `main`
  • Loading branch information
keithamus authored Feb 14, 2018
2 parents 7529f70 + 3a63974 commit 0efbed0
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 5 deletions.
18 changes: 13 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import fs from 'fs';

const ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' );
const CONSOLE_WARN = ( ...args ) => console.warn( ...args ); // eslint-disable-line no-console
const exts = [ '.js', '.json', '.node' ];

export default function nodeResolve ( options = {} ) {
const useModule = options.module !== false;
Expand Down Expand Up @@ -76,17 +77,19 @@ export default function nodeResolve ( options = {} ) {
if ( key[0] === '.' ) {
const absoluteKey = resolve( pkgRoot, key );
browser[ absoluteKey ] = resolved;
if (!extname(key)) browser[ absoluteKey + '.js'] = browser[ absoluteKey+ '.json' ] = browser[ key ];
if ( !extname(key) ) {
exts.reduce( ( browser, ext ) => {
browser[ absoluteKey + ext ] = browser[ key ];
return browser;
}, browser );
}
}
return browser;
}, {});
}

const absoluteMain = pkg[ 'main' ] ? resolve( pkgRoot, pkg[ 'main' ] ) : false;
if (options.browser && typeof pkg[ 'browser' ] === 'string') {
pkg[ 'main' ] = pkg[ 'browser' ];
} else if (options.browser && packageBrowserField && (packageBrowserField[ pkg[ 'main' ] ] || packageBrowserField[ absoluteMain ])) {
pkg[ 'main' ] = packageBrowserField[ pkg[ 'main' ] ] || packageBrowserField[ absoluteMain ];
} else if ( useModule && pkg[ 'module' ] ) {
pkg[ 'main' ] = pkg[ 'module' ];
} else if ( useJsnext && pkg[ 'jsnext:main' ] ) {
Expand All @@ -99,7 +102,12 @@ export default function nodeResolve ( options = {} ) {
extensions: options.extensions
}, customResolveOptions ),
( err, resolved ) => {
if (options.browser && packageBrowserField) browserMapCache[resolved] = packageBrowserField;
if (options.browser && packageBrowserField) {
if (packageBrowserField[ resolved ]) {
resolved = packageBrowserField[ resolved ];
}
browserMapCache[resolved] = packageBrowserField;
}

if ( !disregardResult && !err ) {
if ( resolved && fs.existsSync( resolved ) ) {
Expand Down
2 changes: 2 additions & 0 deletions test/node_modules/isomorphic-object-main-implicit/browser.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions test/node_modules/isomorphic-object-main-implicit/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions test/samples/browser-object/main-implicit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import { env } from 'isomorphic-object-main-implicit';
export { env };
14 changes: 14 additions & 0 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,20 @@ describe( 'rollup-plugin-node-resolve', function () {
});
});

it( 'allows use of object browser field, resolving implicit `main`', function () {
return rollup.rollup({
entry: 'samples/browser-object/main-implicit.js',
plugins: [
nodeResolve({
main: true,
browser: true
})
]
}).then( executeBundle ).then( module => {
assert.equal( module.exports.env, 'browser' );
});
});

it( 'allows use of object browser field, resolving replaced builtins', function () {
return rollup.rollup({
entry: 'samples/browser-object-builtin/main.js',
Expand Down

0 comments on commit 0efbed0

Please sign in to comment.