A babel plugin to evaluate modules at build-time.
I wanted to evaluate some functions and calculations in build process that didn't need to run at runtime, to remove the modules themselves from the bundle to reduce its size.
-
babel-plugin-preval and babel-plugin-codegen only supports CommonJS not ES Modules, and the evaluation does not run in a sandbox.
-
babel-plugin-polished only supports polished and only handles simple syntaxes.
-
babel-plugin-inline-constants only handles constants inlining.
npm install babel-plugin-evaluate-modules
// babel.config.js
module.exports = {
plugins: [["babel-plugin-evaluate-modules", { name: "polished" }]],
};
// App.js
import { rgba } from "polished";
const val = "blue";
const obj = {
color: "#123456",
red: "red",
};
const a = rgba(val, 0.5); // const a = "rgba(0,0,255,0.5)";
const b = rgba(obj["color"], 0.5); // const b = "rgba(18,52,86,0.5)";
const c = rgba(obj.red, 0.5); // const c = "rgba(255,0,0,0.5)";
// babel.config.js
module.exports = {
plugins: [["babel-plugin-evaluate-modules", { name: /\/constants\// }]],
};
// constants/foo.js
export const foo = 2 * 7;
export const bar = "bar" + "baz";
// App.js
import { foo, bar } from "./constants/foo.js";
const fooVal = foo; // const fooVal = 14;
const barVal = bar; // const barVal = "barbaz";
All contributions are welcome. If you find a problem, feel free to create an issue or a PR.
- Fork this repo.
- Run
npm install
. - Commit your fix.
- Add tests to cover your fix.
- Make a PR and confirm all the CI checks passed.