Skip to content

Instantly share code, notes, and snippets.

@vadorovsky
Created December 8, 2023 10:11
Show Gist options
  • Save vadorovsky/dd8c20edae2a8971e3a1a7ce8dd3d2c1 to your computer and use it in GitHub Desktop.
Save vadorovsky/dd8c20edae2a8971e3a1a7ce8dd3d2c1 to your computer and use it in GitHub Desktop.
ChatGPT - features in JS/TS
In JavaScript/TypeScript projects that use build systems like npm or pnpm, feature toggling is typically not handled directly by the package managers themselves. Instead, it's usually achieved through a combination of environment variables and conditional logic within the code. There isn't a direct equivalent to the feature flags as seen in C/autotools, CMake, or Rust/Cargo, but you can achieve similar functionality in a few ways:
1. **Environment Variables**: You can define environment variables in your system or through a `.env` file using libraries like `dotenv`. Your JavaScript/TypeScript code can then check these variables to enable or disable certain features.
Example:
```javascript
if (process.env.ENABLE_FEATURE === 'true') {
// Code for the feature
}
```
2. **Build-Time Flags with Webpack or Other Bundlers**: If you're using a module bundler like Webpack, you can define flags at build time that can be used to include or exclude code in the final bundle.
Example with Webpack's DefinePlugin:
```javascript
new webpack.DefinePlugin({
ENABLE_FEATURE: JSON.stringify(process.env.ENABLE_FEATURE)
})
```
And in your code:
```javascript
if (ENABLE_FEATURE) {
// Feature code
}
```
3. **Conditional Imports**: Using dynamic imports (`import()`) conditionally based on environment variables or other logic.
Example:
```javascript
if (conditionForFeature) {
import('path/to/feature/module').then((module) => {
// Use the module
});
}
```
4. **Package.json Scripts**: You can define custom scripts in your `package.json` file that set environment variables or pass arguments to your build tool.
Example:
```json
"scripts": {
"start:feature": "ENABLE_FEATURE=true node app.js",
"start": "node app.js"
}
```
5. **Feature Flags Libraries**: There are also libraries designed specifically for feature flagging, like `feature-flags` or `LaunchDarkly`, that offer more sophisticated feature management.
Each of these methods can be used to mimic the feature-flagging capabilities found in other build systems, with a focus on runtime or build-time feature toggling. The best approach depends on the specific requirements of your project, such as whether features need to be toggled at runtime or compile-time, and the complexity of the feature toggling required.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment