justin-schroeder / unplugin-pure

Annotate functions as pure for Rollup, Vite, esbuild, and rspack

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

unplugin-pure

This is a fork of Daniel Roe’s rollup-plugin-pure

Features

  • ⚡️ avoids end-users bundling unused code

How it works

Definition functions (for example, in Vue with defineComponent) are increasingly common but do not play nice with tree-shaking. It's not possible to tell whether or not a function call which receives an object can be tree-shaken from a build, as it's possible there might be side effects.

Rollup supports /* #__PURE__ */ annotations to declare this from a library author's point of view, but it can be tricky when we know that every occurrence of a function call is pure.

This plugin will automatically inject the annotation before any occurrence of the function call.

Installation

Install and add unplugin-pure to your Vite or Rollup config.

pnpm add -D unplugin-pure

Vite/Rollup

import { defineConfig } from 'vite'
import { PluginPure } from 'unplugin-pure'

export default defineConfig({
  plugins: [
    PluginPure({
      functions: ['defineComponent'],
      include: [/(?<!im)pure\.js$/],
      // exclude: [],
      // sourcemap: true,
    }),
  ],
})

esbuild

import { esbuildPure } from 'unplugin-pure'

await esbuild.build({
  entryPoints: ['app.jsx'],
  plugins: [esbuildPure({ functions: ['defineComponent'] })],
  bundle: true,
  outfile: 'out.js',
})

💻 Development

  • Clone this repository
  • Enable Corepack using corepack enable (use npm i -g corepack for Node.js < 16.10)
  • Install dependencies using pnpm install
  • Stub module with pnpm dev:prepare
  • Run pnpm dev to start playground in development mode

License

Made with ❤️

Published under the MIT License.

About

Annotate functions as pure for Rollup, Vite, esbuild, and rspack

License:MIT License


Languages

Language:TypeScript 57.6%Language:JavaScript 37.1%Language:HTML 5.3%