saus icon indicating copy to clipboard operation
saus copied to clipboard

[RFC] Option-driven tree-shaking toggles

Open aleclarson opened this issue 3 years ago • 0 comments

The Problem

There's no simple way to include code in client/server bundle only when a specific plugin/framework option has a specific value at build time.

Example

In any Vite-compiled module:

// @toggle foo
callSomeFunction(...args)

The foo toggle should be registered with Saus at build time:

export function MySausPlugin(options) {
  return {
    name: 'my-saus-plugin',
    saus({ toggles }) {
      // The `foo` option of my plugin decides if "foo" toggle is removed.
      if (options.foo) {
        toggles.use("foo")
      }
    }
  }
}

In the above example, if the foo option of MySausPlugin is falsy, the callSomeFunction line is removed at build time.

Ideally, plugins would use namespaces in their toggle IDs:

// @toggle my-saus-plugin.foo
callSomeFunction(...args)

aleclarson avatar Jul 03 '22 20:07 aleclarson