Configure the ForSure CLI to match your project needs and preferences.
The ForSure CLI can be configured using a .forsurerc.json file in your project root. This file allows you to customize default behavior, templates, and output settings.
{
"defaultOutput": "./output",
"ignorePatterns": [
"node_modules",
".git",
"dist"
],
"attributes": {
"defaultPermissions": "644",
"encoding": "utf8"
},
"templates": {
"directory": "./templates",
"defaultTemplate": "basic"
}
}Here's a comprehensive configuration file with all available options:
{
// Global settings
"version": "1.0.0",
"defaultOutput": "./output",
"ignorePatterns": [
"node_modules",
".git",
"dist",
"*.log",
".env*"
],
// File and directory settings
"files": {
"encoding": "utf8",
"defaultPermissions": "644",
"directoryPermissions": "755",
"overwriteExisting": false,
"preserveGitIgnore": true
},
// Template configuration
"templates": {
"directory": "./templates",
"defaultTemplate": "basic",
"customTemplates": {
"react-component": "./templates/react/",
"vue-component": "./templates/vue/",
"api-endpoint": "./templates/api/"
}
},
// Design system settings
"designTokens": {
"input": "./lib/design-tokens.ts",
"output": "./styles/tokens.css",
"format": "css",
"watch": false,
"themes": ["light", "dark"],
"customProperties": true
},
// Component generation
"components": {
"directory": "./components/ui",
"prefix": "forsure-",
"typescript": true,
"test": true,
"storybook": true,
"defaultExports": true,
"cssModules": false
},
// Build configuration
"build": {
"outputDirectory": "./dist",
"minify": true,
"sourcemap": true,
"target": "es2020",
"bundle": false,
"cleanOutput": true
},
// Testing configuration
"testing": {
"framework": "jest",
"coverage": true,
"coverageThreshold": 80,
"testEnvironment": "jsdom",
"setupFiles": ["./jest.setup.js"]
},
// Publishing settings
"publishing": {
"registry": "npm",
"defaultTag": "latest",
"access": "public",
"changelog": true,
"gitTag": true
},
// Development settings
"development": {
"port": 3000,
"hotReload": true,
"openBrowser": true,
"verbose": false
},
// Integration settings
"integrations": {
"vscode": {
"enabled": true,
"snippets": true,
"intellisense": true
},
"git": {
"hooks": true,
"autoCommit": false,
"branchProtection": false
},
"ci": {
"github": true,
"gitlab": false,
"jenkins": false
}
}
}Control how files and directories are created:
{
"files": {
"encoding": "utf8", // File encoding
"defaultPermissions": "644", // Default file permissions
"directoryPermissions": "755", // Default directory permissions
"overwriteExisting": false, // Whether to overwrite existing files
"preserveGitIgnore": true, // Keep existing .gitignore files
"backupOnOverwrite": true // Create backups before overwriting
}
}Configure template locations and defaults:
{
"templates": {
"directory": "./templates", // Custom templates directory
"defaultTemplate": "basic", // Default template to use
"fallbackTemplate": "minimal", // Fallback if default not found
"customTemplates": { // Named custom templates
"react-component": "./templates/react/",
"vue-component": "./templates/vue/",
"api-endpoint": "./templates/api/"
},
"templateVariables": { // Global template variables
"author": "Your Name",
"license": "MIT",
"version": "1.0.0"
}
}
}Configure design token generation:
{
"designTokens": {
"input": "./lib/design-tokens.ts", // Input tokens file
"output": "./styles/tokens.css", // Output file
"format": "css", // Output format (css, scss, ts, json)
"watch": false, // Watch for changes
"themes": ["light", "dark"], // Available themes
"customProperties": true, // Generate CSS custom properties
"compress": true, // Minify output
"sourcemap": false // Generate source maps
}
}Configure component generation settings:
{
"components": {
"directory": "./components/ui", // Output directory
"prefix": "forsure-", // Component name prefix
"typescript": true, // Generate TypeScript files
"test": true, // Generate test files
"storybook": true, // Generate Storybook stories
"defaultExports": true, // Use default exports
"cssModules": false, // Use CSS modules
"propTypes": false, // Generate PropTypes (JS)
"forwardRef": true, // Forward refs in components
"memo": false // Wrap components in React.memo
}
}You can have different configurations for different environments:
{
// Base configuration
"defaultOutput": "./output",
"templates": {
"defaultTemplate": "basic"
},
// Environment-specific overrides
"environments": {
"development": {
"files": {
"overwriteExisting": true
},
"development": {
"port": 3001,
"verbose": true
}
},
"production": {
"build": {
"minify": true,
"sourcemap": false
},
"files": {
"overwriteExisting": false
}
},
"test": {
"testing": {
"coverage": true,
"coverageThreshold": 90
}
}
}
}Use the FORSURE_ENV environment variable to specify which environment to use:
export FORSURE_ENV=production
forsure generate project.forsureThe ForSure CLI loads configuration in the following order (later options override earlier ones):
~/.forsurerc.json).forsurerc.json)You can validate your configuration file:
forsure config validate
forsure config validate --file ./custom-config.jsonCommon validation errors and their solutions:
Check for syntax errors in your configuration file
Remove or rename invalid configuration properties
Ensure all file paths exist and are accessible
ForSure provides pre-defined configuration templates for common setups:
forsure config init --template reactOptimized for React projects with TypeScript and testing
forsure config init --template nextjsConfigured for Next.js with app router and design system
forsure config init --template node-apiSet up for Node.js API projects with Express/Fastify
forsure config init --template design-systemOptimized for design system development with Storybook
Learn more about using the ForSure CLI: