Forked from bastienrobert/rollup-plugin-rename-imports.js
Last active
October 19, 2019 15:50
-
-
Save juliendargelos/f5a3f62287e035d73ae72f1491044bed to your computer and use it in GitHub Desktop.
Rollup plugin to rename imports in an ES modules
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import fs from 'fs' | |
/** | |
* @example | |
* // In rollup.config.js | |
* export default { | |
* // ... | |
* plugins: [ | |
* webDependencies({ | |
* // Use pika cdn by default | |
* 'preact': '^8.5.2', | |
* // Use custom location | |
* 'redux': 'https://cdn.pika.dev/redux/^4.0.4' | |
* }) | |
* ] | |
* } | |
* | |
* // In package.json | |
* { | |
* "webDependencies": { | |
* "preact": "^8.5.2", | |
* "redux": "https://cdn.pika.dev/redux/^4.0.4" | |
* } | |
* } | |
*/ | |
export default function webDependencies(webDepencencies = {}) { | |
return { | |
name: 'web-dependencies', | |
transform(code) { | |
this.externals.forEach(({ pattern, source }) => code.replace( | |
pattern, | |
`$1'${source}'$2` | |
) | |
}, | |
async options(opts) { | |
opts = { external: [], ...opts } | |
const pkg = await new Promise((resolve) => { | |
fs.readFile('package.json', (error, content) => resolve(error | |
? {} | |
: JSON.parse(content.toString()) | |
)) | |
}) | |
this.externals = Object | |
.entries({ ...pkg.webDependencies, ...webDependencies }) | |
.map((name, source) => { | |
opts.external.push(name) | |
return { | |
pattern: new RegExp(`^(\s*import\s+.?)(?:'${name}'|"${name}")(\s*;?\s*)$`, 'mg'), | |
source: /^https?:\/\//.test(source) | |
? source | |
: `https://cdn.pika.dev/${name}/${source}` | |
} | |
} | |
return opts | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment