npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

rollup-plugin-conditional-compilation

v1.0.6

Published

Conditional Compilation macros like #if #endif in C++.

Readme

Conditional Compilation

npm version npm downloads License: MIT Codacy Badge

A simple plugin that allows you to include or exclude code blocks based on compile-time conditions. Same as #if, #else, #elif , #endif in C/C++, it looks like this:

// #if DEBUG
console.log('user', userData); // when DEBUG is false, this line will be removed
// #endif

Note: You should modify the plugin options to ensure NOT to strip comments so quickly, since we work with them. For example, with @rollup/plugin-typescript, set removeComments: false.

More Rollup Plugins you might be interested in:

Fixed Issues in v1.0.6

  1. Added configurable ecmaVersion and sourceType options to pass to Acorn. Previously, sourceType is fixed in this plugin and prevented parsing ES module files; this is now configurable.
  2. Fixed an issue where variables was required; variables is now optional.

Installation

npm install --save-dev rollup-plugin-conditional-compilation
pnpm add -D rollup-plugin-conditional-compilation

Usage (rollup.config.js)

import conditional from 'rollup-plugin-conditional-compilation';
export default {
  ...other configs,
  plugins: [
    // Recommended: run `conditional` before the TypeScript transformer so the
    // plugin operates on the original source comments.
    conditional({ variables: { DEBUG: false, FEATURE_X: true } }),
    typescript({
      ...,
      removeComments: false, // !!IMPORTANT!! Don't strip comments so quickly!
    }),
  ],
};

Syntax

  • Single-line directives only: // #if <expression>, // #else, // #elif <expression> and // #endif.
  • The <expression> is evaluated at build time with the keys from variables available as identifiers.
    • You can write literally ANY JavaScript expressions in it, because it is evaluated as an IIFE (Immediately Invoked Function Expression).
    • Supported directives: #if, #else, #elif, #endif (similar to C/C++ style conditional compilation).
  • Since it is if/else , it follows the syntax of if/else statements

Example

Remove testing methods in your class when compiling for production:

class User {
  private name: string;
  private identifier: string;

  // #if DEBUG
  // This method will be removed in production build
  _getTestData() {
    return SomeImportantDataForTesting;
  }
  // #endif
}

If variables.DEBUG === false, compiled output becomes:

console.log('always');

Behaviors

  • AST Parsing: Using Acorn with { ecmaVersion: "latest", sourceType: "module" } by default to parse the code, so it supports the latest JavaScript syntax and ES modules.

  • Directive Style: Only // comments are scanned for directives; block comments (/* ... */) are ignored.

    • Reason 1: block comments can span multiple lines with * ahead and may contain nested comments, making parsing more complex and error-prone.
    • Reason 2: For consistency and simplicity.
  • Precise Evaluation: Expressions are executed using the Function constructor — do not pass untrusted input or rely on side effects.

License

MIT