diff --git a/index.js b/index.js index a080448..4a03172 100644 --- a/index.js +++ b/index.js @@ -1,25 +1,27 @@ -const readPkg = require('read-pkg'); -const { walk } = require('estree-walker'); -const MagicString = require('magic-string'); +const readPkg = require("read-pkg"); +const { walk } = require("estree-walker"); +const MagicString = require("magic-string"); const padStr = str => `'${str}'`; -module.exports = ({ transform = (name, version) => `https://unpkg.com/${name}@${version}?type=module` } = {}) => { +module.exports = ({ transform = (name, version) => `https://unpkg.com/${name}@${version}?type=module`, autoDiscoverExternals = true } = {}) => { const pkg = readPkg.sync(); const cache = {}; return { - name: 'unpkg', + name: "unpkg", options(opts) { let deps = (pkg && pkg.dependencies) || {}; - + let userDefinedExternal = Array.isArray(opts.external) ? opts.external : []; Object.keys(deps).forEach(dep => { - const manifest = readPkg.sync(require.resolve(`${dep}/package.json`)); - if (manifest.module) cache[manifest.name] = transform(manifest.name, manifest.version); + // If auto discover is set to false only add to cache if dep is in external list. + if (autoDiscoverExternals || userDefinedExternal.includes(dep)) { + const manifest = readPkg.sync({ cwd: `${process.cwd()}/node_modules/${dep}` }); + if (manifest.module) cache[manifest.name] = transform(manifest.name, manifest.version); + } }); let external = Object.values(cache); - if (Array.isArray(opts.external)) { - external = Array.from(new Set(opts.external.concat(external))); - } + external = Array.from(new Set(userDefinedExternal.concat(external))); + return Object.assign({}, opts, { external }); }, transform(code, id) { @@ -27,7 +29,7 @@ module.exports = ({ transform = (name, version) => `https://unpkg.com/${name}@${ const magicString = new MagicString(code); walk(ast, { enter(node, parent) { - if (node.type === 'Literal' && parent.type === 'ImportDeclaration') { + if (node.type === "Literal" && parent.type === "ImportDeclaration") { if (cache[node.value]) magicString.overwrite(node.start, node.end, padStr(cache[node.value]), { storeName: false