4.1.0 • Published 1 year ago

babel-plugin-inline-constants v4.1.0

Weekly downloads
5
License
MIT
Repository
github
Last release
1 year ago

babel-plugin-inline-constants

Build Coverage Downloads

Babel plugin to inline constants in code.

Contents

What is this?

This package is a Babel plugin to inline constants in code.

When should I use this?

This package is useful because gzip likes repeated patterns (such as using magic numbers or strings multiple times), whereas looking things up in objects is easier to develop with. “Constants” here are specific files that are imported or required which contain primitives (numbers, strings, booleans, null).

An example is micromark, which is a complex state machine that uses a lot of constants. Developing with those constants exported from a file, rather than inline, is easier. Shipping those inlines helps with bundle size.

Install

This package is ESM only. In Node.js (version 14.14+, 16.0+), install with npm:

npm install babel-plugin-inline-constants

In Deno with esm.sh:

import inlineConstants from 'https://esm.sh/babel-plugin-inline-constants@4'

In browsers with esm.sh:

<script type="module">
  import inlineConstants from 'https://esm.sh/babel-plugin-inline-constants@4?bundle'
</script>

Use

First, this plugin must be configured with a modules, so in a .babelrc or so, do:

{
  "plugins": [["babel-plugin-inline-constants", {"modules": "./math.js"}]]
}

…then, our module math.js:

export const pi = 3.14

…and example.js:

import {pi} from './math.js'

console.log('one pi:', pi)
console.log('two pi:', 2 * pi)
console.log('pi pi:', pi * pi)

…now running Babel:

babel example.js

Yields:

console.log('one pi:', 3.14);
console.log('two pi:', 2 * 3.14);
console.log('pi pi:', 3.14 * 3.14);

API

This package does not export identifiers. The default export is inlineConstants

inlineConstants

Babel plugin to inline constants in code. See Babel’s documentation on how to use Babel plugins.

This plugin must be configured with a modules array. Values in this array are the same as the x in import y from x, and resolve from the current working directory that babel is running in. When these modules are then used in code, their values are inlined. So, if you are going to inline a file from node_modules such as charcodes, you can use modules: ['charcodes']. ESM (import) and CJS (require) are supported.

⚠️ Danger: modules to be inlined are evaluated with Node, so only use this plugin if you completely trust your code.

👉 Note: PRs welcome to make this rather experimental project better

options

Configuration (required).

options.modules

List of modules to inline (string|Array<string>).

options.ignoreModuleNotFound

Ignore the error when modules cannot be found (boolean, default: false).

Types

This package is fully typed with TypeScript. It exports the additional type Options.

Compatibility

This package is at least compatible with all maintained versions of Node.js. As of now, that is Node.js 14.14+ and 16.0+. It also works in Deno and modern browsers.

Security

This package is safe assuming you trust the code you use.

Related

Contribute

Yes please! See How to Contribute to Open Source.

License

MIT © Titus Wormer