Skip to content

Instantly share code, notes, and snippets.

@bastienrobert
Created October 19, 2019 10:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save bastienrobert/2e133fb38dde661cd1c2c5024d8719a7 to your computer and use it in GitHub Desktop.
Save bastienrobert/2e133fb38dde661cd1c2c5024d8719a7 to your computer and use it in GitHub Desktop.
Rollup plugin to rename imports in an ES modules
/**
* @example
* // rename 'preact' as 'https://cdn.pika.dev/preact/^8.5.2'
* // and set 'https://cdn.pika.dev/preact/^8.5.2' as external
* renameImports({ 'preact': 'https://cdn.pika.dev/preact/^8.5.2' })
*/
export default function renameImports(packages = {}) {
return {
name: 'rename-imports',
transform(code) {
for (let npm in packages) {
const cdn = packages[npm]
const regex = new RegExp(
`^import(?:["'\\s]*([\\w*{}\\n, ]+)(from)\\s*)?\\s*(["'\\s]${npm}["'\\s])`,
'm'
)
return code.replace(regex, `import $1$2 '${cdn}'`)
}
},
options(opts) {
const external = Object.values(packages)
return Object.assign({}, opts, { external })
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment