Transform external imports into global variables like Rollup's output.globals option. See rollup/rollup#2374
npm install -D rollup-plugin-external-globals
import externalGlobals from "rollup-plugin-external-globals";
export default {
input: ["entry.js"],
output: {
dir: "dist",
format: "es"
},
plugins: [
externalGlobals({
jquery: "$"
})
]
};The above config transforms
import jq from "jquery";
console.log(jq(".test"));into
console.log($(".test"));It also transforms dynamic import:
import("jquery")
.then($ => {
$ = $.default || $;
console.log($(".test"));
});
// transformed
Promise.resolve($)
.then($ => {
$ = $.default || $;
console.log($(".test"));
});Note: when using dynamic import, you should notice that in ES module, the resolved object is aways a module namespace, but the global variable might be not.
Note: this plugin only works with import/export syntax. If you are using a module loader transformer e.g.
rollup-plugin-commonjs, you have to put this plugin after the transformer plugin.
This module exports a single function.
const plugin = createPlugin(
globals: Object | Function,
{
include?: ReadonlyArray<string | RegExp> | string | RegExp | null,
exclude?: ReadonlyArray<string | RegExp> | string | RegExp | null,
dynamicWrapper?: Function,
constBindings?: Boolean
} = {}
);globals is a moduleId/variableName map. For example, to map jquery module to $:
const globals = {
jquery: "$"
}or provide a function that takes the moduleId and returns the variableName.
const globals = (id) => {
if (id === "jquery") {
return "$";
}
}include is a valid picomatch glob pattern, or array of patterns. If defined, only matched files would be transformed.
exclude is a valid picomatch glob pattern, or array of patterns. Matched files would not be transformed.
dynamicWrapper is used to specify dynamic imports. Below is the default.
const dynamicWrapper = (id) => {
return `Promise.resolve(${id})`;
}Virtual modules are always transformed.
constBindings is a boolean. If true, the plugin will use const instead of var to declare the variable. This usually happens when you try to re-export the global variable. Default is false.
-
0.13.0 (Nov 20, 2024)
- Change: update include/exclude signature
-
0.12.1 (Nov 15, 2024)
- Fix: there is no debug hook in rollup 2.
-
0.12.0 (Aug 11, 2024)
- Change: throw on export all declaration.
- Change: define variables with
var, addconstBindingsoption to useconstinstead. - Change: resolve identifiers as external.
-
0.11.0 (Jun 27, 2024)
- Fix: local variable conflict in export declaration.
- Change: don't throw on parse error.
-
0.10.0 (Apr 5, 2024)
- Add:
exportsfield in package.json to export typescript declaration.
- Add:
-
0.9.2 (Jan 21, 2024)
- Fix: support rollup 4.9.6.
-
0.9.1 (Nov 19, 2023)
- Fix: type declaration.
-
0.9.0 (Oct 28, 2023)
- Breaking: bump to rollup@4.
-
0.8.0 (May 12, 2023)
- Bump dependencies. Update to [email protected]
-
0.7.2 (mar 9, 2023)
- Add: typescript declaration.
-
0.7.0 (Nov 21, 2022)
- Breaking: bump to rollup@3.
-
0.6.1 (Oct 21, 2020)
- Fix: add an extra assignment when exporting globals.
-
0.6.0 (Aug 14, 2020)
- Breaking: bump to rollup@2.
-
0.5.0 (Dec 8, 2019)
- Add:
dynamicWrapperoption. - Add: now
globalscan be a function. - Bump dependencies/peer dependencies.
- Add:
-
0.4.0 (Sep 24, 2019)
- Add: transform dynamic imports i.e.
import("foo")=>Promise.resolve(FOO).
- Add: transform dynamic imports i.e.
-
0.3.1 (Jun 6, 2019)
- Fix: all export-from statements are incorrectly transformed.
- Bump dependencies.
-
0.3.0 (Mar 25, 2019)
- Fix: temporary variable name conflicts.
- Breaking: transform virtual modules. Now the plugin transforms proxy modules generated by commonjs plugin.
- Bump dependencies.
-
0.2.1 (Oct 2, 2018)
- Fix: don't skip export statement.
-
0.2.0 (Sep 12, 2018)
- Change: use
transformhook. - Add: rewrite conflicted variable names.
- Add: handle export from.
- Change: use
-
0.1.0 (Aug 5, 2018)
- Initial release.