Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

ifdef-loader

Package Overview
Dependencies
Maintainers
1
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ifdef-loader

Webpack loader that allows JavaScript or TypeScript conditional compilation (`#if ... #elif ... #else ... #endif`) directly from Webpack.

  • 2.1.3
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
14K
increased by20.73%
Maintainers
1
Weekly downloads
 
Created
Source

ifdef-loader

Webpack loader that allows JavaScript or TypeScript conditional compilation (#if ... #elif ... #else ... #endif) directly from Webpack.

Conditional compilation directives are written inside /// triple slash comment so that they don't effect normal JavaScript or TypeScript parsing.

Example:

/// #if DEBUG
console.log("there's a bug!");
/// #endif

The DEBUG or any other variable can be specified when configuring the Webpack loader (see below).

The directive #if accepts any valid JavaScript expression:

/// #if PRODUCTION && version.charAt(0)=='X'
console.log("Ho!");
/// #endif

If the expression is true the block of code between #if and #endif is included, otherwise is excluded by commenting it out.

Additionally, #elif and #else clauses can be added to an #if clause:

/// #if env == 'PRODUCTION'
console.log('Production!');
/// #elif env == 'DEBUG'
console.log('Debug!');
/// #else
console.log('Something else!');
/// #endif

The #if clauses can also be nested:

/// #if PRODUCTION
      /// #if OS=="android"
      android_code();
      /// #elif OS=="ios"
      ios_code();
      /// #endif
/// #endif

Installation

In webpack build directory:

npm install ifdef-loader --save-dev

Configuration

Example of use with TypeScript files, enabling the DEBUG and version variables:

In webpack.config.json put ifdef-loader after ts-loader so that files are processed before going into TypeScript compiler:

// define preprocessor variables
const opts = {
   DEBUG: true,
   version: 3,
   "ifdef-verbose": true,       // add this for verbose output
   "ifdef-triple-slash": false  // add this to use double slash comment instead of default triple slash
};

/* ... */ { 
   test: /\.tsx?$/, 
   exclude: /node_modules/, 
   use: [
      { loader: "ts-loader" }, 
      { loader: "ifdef-loader", options: opts } 
   ]
}

// alternatively, options can be passed via query string:
const q = require('querystring').encode(opts);
/* ... */ { 
   test: /\.tsx?$/, 
   exclude: /node_modules/, 
   loaders: [ "ts-loader", `ifdef-loader?${q}` ] 
}

in example.ts:

/// #if DEBUG
     /* code to be included if DEBUG is defined */
///   #if version <2
        /* code to be included if DEBUG is defined and version < 2*/
///   #endif
/// #endif

License

MIT

Contributions

Contributions in the form of issues or pull requests are welcome.

Changes

  • v2.1.0 added support for #elif clause.

  • v2.0.0 BREAKING CHANGE: options are now passed using the standard Webpack API (loader-utils). See below for the upgrade.

  • v1.0.0 changed to triple slash comment syntax. Double slash syntax deprecated and available by turning off the ifdef-triple-slash option.

  • v1.0.3 fixed bug occurring with short lines. Improved handling of line termination (CRLF vs LF) in order to preserve source maps.

  • v1.1.0 added support for #else clauses.

Upgrading from v1 to v2

In v2 options are passed differently than v1, so you need to update your webpack.config.js. Just do the following simple changes:

/* from */ const q = require('querystring').encode({json: JSON.stringify(opts)});
/* to   */ const q = require('querystring').encode(opts);
/* you can keep the  ... `ifdef-loader?${q}` ... syntax    */
/* but it's better to pass options directly (see the docs) */

FAQs

Package last updated on 07 Aug 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc