ts-transform-define

Create global constants which can be configured at compile time using the TypeScript compiler.

MIT License

Stars
7
Committers
4

ts-transform-define npm

Allows you to create global constants which can be configured at compile time. This is the TypeScript equivalent of https://webpack.js.org/plugins/define-plugin/.

Usage

npm i ts-transform-define ttypescript

Update your tsconfig.json:

{
  "compilerOptions": {
    "plugins": [
      {
        "transform": "ts-transform-define",
        "replace": {
          "PRODUCTION": "true",
          "VERSION": "'5fa3b9'",
          "BROWSER_SUPPORTS_HTML5": true,
          "TWO": "1+1",
          "typeof window": "'object'",
          "process.env.NODE_ENV": "process.env.NODE_ENV",
          "isNodeEnvironment()": "true"
        }
      }
    ]
  }
}

Run TTypeScript instead of TypeScript:

-tsc
+ttsc

Note that because the plugin does a direct text replacement, the value given to it must include actual quotes inside of the string itself. Typically, this is done either with alternate quotes, such as '"production"'.

index.ts

if (!PRODUCTION) {
  console.log('Debug info');
}

if (PRODUCTION) {
  console.log('Production log');
}

After passing through the transformer:

if (!true) {
  console.log('Debug info');
}
if (true) {
  console.log('Production log');
}

and then after a minification pass results in:

console.log('Production log');

Environment variables

When replacing with environment variables it will pass them through, so if we have this code:

if (process.env.NODE_ENV === 'development') {
  doLotsOfWorkInDev();
}

And then we have this config

{
  "compilerOptions": {
    "plugins": [
      {
        "transform": "ts-transform-define",
        "replace": {
          "process.env.NODE_ENV": "process.env.NODE_ENV"
        }
      }
    ]
  }
}

And then we run

NODE_ENV="production" ttsc

The code gets transformed to

if ('production' === 'development') {
  doLotsOfWorkInDev();
}

Which minifiers will see false in the if statement and delete the block.

Gotchas

When replacing with environment variables, e.g. process.env.NODE_ENV - if it is not set at build time it will ignore replacing the expression.

E.g:

{
  "compilerOptions": {
    "plugins": [
      {
        "transform": "ts-transform-define",
        "replace": {
          "process.env.NODE_ENV": "process.env.DONT_EXIST"
        }
      }
    ]
  }
}

Will result in:

if (process.env.NODE_ENV === 'development') {
  doLotsOfWorkInDev();
}

Instead of:

if (process.env.DONT_EXIST === 'development') {
  doLotsOfWorkInDev();
}
Badges
Extracted from project README
npm
Related Projects