diff --git a/index.js b/index.js index 0d52cfb..5009f60 100644 --- a/index.js +++ b/index.js @@ -50,6 +50,10 @@ function tryResolve(pkg, importer) { return relative.resolve(pkg, importer); } catch (err) { if (err.code === 'MODULE_NOT_FOUND') return null; + if (err.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') { + console.warn(`WARNING: Could not read svelte config from ${pkg}. Reason: ${err.message}`); + return null; + } throw err; } } diff --git a/test/node_modules/esm-module-without-svelte-config/index.js b/test/node_modules/esm-module-without-svelte-config/index.js new file mode 100644 index 0000000..e69de29 diff --git a/test/node_modules/esm-module-without-svelte-config/package.json b/test/node_modules/esm-module-without-svelte-config/package.json new file mode 100644 index 0000000..f30f103 --- /dev/null +++ b/test/node_modules/esm-module-without-svelte-config/package.json @@ -0,0 +1,6 @@ +{ + "main": "./index.js", + "exports": { + ".": "./index.js" + } +} diff --git a/test/node_modules/esm-widget/index.js b/test/node_modules/esm-widget/index.js new file mode 100644 index 0000000..e69de29 diff --git a/test/node_modules/esm-widget/package.json b/test/node_modules/esm-widget/package.json new file mode 100644 index 0000000..d5d6d33 --- /dev/null +++ b/test/node_modules/esm-widget/package.json @@ -0,0 +1,8 @@ +{ + "main": "./index.js", + "svelte": "src/Widget.html", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + } +} diff --git a/test/node_modules/esm-widget/src/Widget.html b/test/node_modules/esm-widget/src/Widget.html new file mode 100644 index 0000000..9b44ef5 --- /dev/null +++ b/test/node_modules/esm-widget/src/Widget.html @@ -0,0 +1 @@ +

i am a widget

\ No newline at end of file diff --git a/test/test.js b/test/test.js index c48e0e0..f96c26f 100644 --- a/test/test.js +++ b/test/test.js @@ -33,6 +33,22 @@ describe('rollup-plugin-svelte', () => { ); }); + it('ignores esm module not exporting package.json', () => { + const { resolveId } = plugin(); + assert.equal( + resolveId('esm-module-without-svelte-config', path.resolve('test/foo/main.js')), + null + ); + }); + + it('resolves esm module exporting package.json', () => { + const { resolveId } = plugin(); + assert.equal( + resolveId('esm-widget', path.resolve('test/foo/main.js')), + path.resolve('test/node_modules/esm-widget/src/Widget.html') + ); + }); + it('ignores virtual modules', () => { const { resolveId } = plugin(); assert.equal(