diff --git a/src/finders.js b/src/finders.js index e639dd03e..619bc3c22 100644 --- a/src/finders.js +++ b/src/finders.js @@ -117,6 +117,16 @@ function getDependencies(filename, basedir) { const currentModulePath = path.join(currentModule.path, '..') const packageJson = currentModule.packageJson + if (packageJson.peerDependenciesMeta) { + packageJson.optionalDependencies = packageJson.optionalDependencies || {} + + for (const depKey in packageJson.peerDependenciesMeta) { + if (packageJson.peerDependenciesMeta[depKey].optional) { + packageJson.optionalDependencies[depKey] = packageJson.peerDependencies[depKey] + } + } + } + if (modulePaths.has(currentModulePath)) { continue } diff --git a/src/fixtures/node-module-peer-optional/function.js b/src/fixtures/node-module-peer-optional/function.js new file mode 100644 index 000000000..4295c0e6e --- /dev/null +++ b/src/fixtures/node-module-peer-optional/function.js @@ -0,0 +1,7 @@ +try { + // eslint-disable-next-line node/no-missing-require + require('consistent-ids') + // eslint-disable-next-line no-empty +} catch (error) {} + +module.exports = true diff --git a/src/fixtures/node-module-peer-optional/package.json b/src/fixtures/node-module-peer-optional/package.json new file mode 100644 index 000000000..c3600c138 --- /dev/null +++ b/src/fixtures/node-module-peer-optional/package.json @@ -0,0 +1,11 @@ +{ + "peerDependencies": { + "consistent-ids": "0.1.1" + }, + "peerDependenciesMeta": { + "consistent-ids": { + "optional": true + } + } +} + diff --git a/src/main.test.js b/src/main.test.js index 51d193ce2..7e3f6dfab 100644 --- a/src/main.test.js +++ b/src/main.test.js @@ -68,6 +68,10 @@ test.skip('Ignore missing whitelisted optional dependencies', async t => { await zipNode(t, 'node-module-optional-whitelist') }) +test.skip('Ignore missing optional peer dependencies', async t => { + await zipNode(t, 'node-module-peer-optional') +}) + test('Can require local files', async t => { await zipNode(t, 'local-require') })