From 33b9ebc78337be6da73a791a410832441f1239aa Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Mon, 11 Feb 2019 19:39:57 -0500 Subject: [PATCH] Add `module` as server fallback main field (#6256) * Add `module` as server fallback main field * Test that a module only package can be imported --- packages/next/build/webpack-config.js | 2 +- .../config/node_modules/module-only-package/index.js | 1 + .../config/node_modules/module-only-package/modern.js | 1 + .../config/node_modules/module-only-package/package.json | 5 +++++ test/integration/config/pages/module-only-content.js | 3 +++ test/integration/config/test/index.test.js | 3 ++- test/integration/config/test/rendering.js | 5 +++++ 7 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 test/integration/config/node_modules/module-only-package/index.js create mode 100644 test/integration/config/node_modules/module-only-package/modern.js create mode 100644 test/integration/config/node_modules/module-only-package/package.json create mode 100644 test/integration/config/pages/module-only-content.js diff --git a/packages/next/build/webpack-config.js b/packages/next/build/webpack-config.js index 47be46b1..8b63d77f 100644 --- a/packages/next/build/webpack-config.js +++ b/packages/next/build/webpack-config.js @@ -189,7 +189,7 @@ export default async function getBaseWebpackConfig (dir, {dev = false, isServer [PAGES_DIR_ALIAS]: path.join(dir, 'pages'), [DOT_NEXT_ALIAS]: distDir }, - mainFields: isServer ? ['main'] : ['browser', 'module', 'main'] + mainFields: isServer ? ['main', 'module'] : ['browser', 'module', 'main'] } const webpackMode = dev ? 'development' : 'production' diff --git a/test/integration/config/node_modules/module-only-package/index.js b/test/integration/config/node_modules/module-only-package/index.js new file mode 100644 index 00000000..8f067cba --- /dev/null +++ b/test/integration/config/node_modules/module-only-package/index.js @@ -0,0 +1 @@ +module.exports = "I am sometimes found by tooling. I shouldn't be." diff --git a/test/integration/config/node_modules/module-only-package/modern.js b/test/integration/config/node_modules/module-only-package/modern.js new file mode 100644 index 00000000..0fbb58e8 --- /dev/null +++ b/test/integration/config/node_modules/module-only-package/modern.js @@ -0,0 +1 @@ +export default 'OK' diff --git a/test/integration/config/node_modules/module-only-package/package.json b/test/integration/config/node_modules/module-only-package/package.json new file mode 100644 index 00000000..7da9469c --- /dev/null +++ b/test/integration/config/node_modules/module-only-package/package.json @@ -0,0 +1,5 @@ +{ + "name": "module-only-package", + "description": "I'm a hipster package that only ships a module entrypoint.", + "module": "./modern.js" +} diff --git a/test/integration/config/pages/module-only-content.js b/test/integration/config/pages/module-only-content.js new file mode 100644 index 00000000..357a852d --- /dev/null +++ b/test/integration/config/pages/module-only-content.js @@ -0,0 +1,3 @@ +import messageInAPackage from 'module-only-package' + +export default () =>

{messageInAPackage}

diff --git a/test/integration/config/test/index.test.js b/test/integration/config/test/index.test.js index 69af07bb..8d10297f 100644 --- a/test/integration/config/test/index.test.js +++ b/test/integration/config/test/index.test.js @@ -35,7 +35,8 @@ describe('Configuration', () => { await Promise.all([ renderViaHTTP(context.appPort, '/next-config'), renderViaHTTP(context.appPort, '/build-id'), - renderViaHTTP(context.appPort, '/webpack-css') + renderViaHTTP(context.appPort, '/webpack-css'), + renderViaHTTP(context.appPort, '/module-only-component') ]) }) afterAll(() => { diff --git a/test/integration/config/test/rendering.js b/test/integration/config/test/rendering.js index 62cf20d2..b2e8dea2 100644 --- a/test/integration/config/test/rendering.js +++ b/test/integration/config/test/rendering.js @@ -33,5 +33,10 @@ export default function ({ app }, suiteName, render, fetch) { const $ = await get$('/build-id') expect($('#buildId').text() === '-') }) + + test('correctly imports a package that defines `module` but no `main` in package.json', async () => { + const $ = await get$('/module-only-content') + expect($('#messageInAPackage').text() === 'OK') + }) }) }