diff --git a/index.js b/index.js index 0d52cfb..59b2725 100644 --- a/index.js +++ b/index.js @@ -6,6 +6,7 @@ const { createFilter } = require('rollup-pluginutils'); const { encode, decode } = require('sourcemap-codec'); const major_version = +version[0]; +const pkg_export_errors = new Set(); const { compile, preprocess } = major_version >= 3 ? require('svelte/compiler.js') @@ -50,6 +51,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') { + pkg_export_errors.add(pkg.replace(/\/package.json$/, '')); + return null; + } throw err; } } @@ -334,7 +339,13 @@ module.exports = function svelte(options = {}) { }, this.warn); css(writer); + + } + if (pkg_export_errors.size < 1) return; + + console.warn('\nrollup-plugin-svelte: The following packages did not export their `package.json` file so we could not check the `svelte` field. If you had difficulties importing svelte components from a package, then please contact the author and ask them to export the package.json file.\n'); + console.warn(Array.from(pkg_export_errors).map(s => `- ${s}`).join('\n') + '\n'); } }; }; diff --git a/test/node_modules/esm-component/index.js b/test/node_modules/esm-component/index.js new file mode 100644 index 0000000..e69de29 diff --git a/test/node_modules/esm-component/package.json b/test/node_modules/esm-component/package.json new file mode 100644 index 0000000..19800a3 --- /dev/null +++ b/test/node_modules/esm-component/package.json @@ -0,0 +1,8 @@ +{ + "main": "./index.js", + "svelte": "src/Component.svelte", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + } +} \ No newline at end of file diff --git a/test/node_modules/esm-component/src/Component.svelte b/test/node_modules/esm-component/src/Component.svelte new file mode 100644 index 0000000..4ca9f23 --- /dev/null +++ b/test/node_modules/esm-component/src/Component.svelte @@ -0,0 +1 @@ +

Hello, I am a component

diff --git a/test/node_modules/esm-no-pkg-export/index.js b/test/node_modules/esm-no-pkg-export/index.js new file mode 100644 index 0000000..e69de29 diff --git a/test/node_modules/esm-no-pkg-export/package.json b/test/node_modules/esm-no-pkg-export/package.json new file mode 100644 index 0000000..47b28e3 --- /dev/null +++ b/test/node_modules/esm-no-pkg-export/package.json @@ -0,0 +1,6 @@ +{ + "main": "./index.js", + "exports": { + ".": "./index.js" + } +} \ No newline at end of file diff --git a/test/test.js b/test/test.js index c48e0e0..ee62c55 100644 --- a/test/test.js +++ b/test/test.js @@ -33,6 +33,22 @@ describe('rollup-plugin-svelte', () => { ); }); + it('ignores esm modules that do not export package.json', () => { + const { resolveId } = plugin(); + assert.equal( + resolveId('esm-no-pkg-export', path.resolve('test/foo/main.js')), + null + ); + }); + + it('resolves esm module that exports package.json', () => { + const { resolveId } = plugin(); + assert.equal( + resolveId('esm-component', path.resolve('test/foo/main.js')), + path.resolve('test/node_modules/esm-component/src/Component.svelte') + ); + }); + it('ignores virtual modules', () => { const { resolveId } = plugin(); assert.equal(