$npx -y skills add edutrul/drupal-ai --skill drupal-drushDrush commands for Drupal — cache, config, module management, generators, field creation, and non-interactive scaffolding for AI-assisted development.
| 1 | # Drush Commands |
| 2 | |
| 3 | ## Essential Daily Commands |
| 4 | |
| 5 | ```bash |
| 6 | drush cr # Clear all caches |
| 7 | drush cex -y # Export configuration |
| 8 | drush cim -y # Import configuration |
| 9 | drush updb -y # Run database updates |
| 10 | drush en module_name # Enable a module |
| 11 | drush pmu module_name # Uninstall a module |
| 12 | drush ws --severity=error # Watch error logs |
| 13 | drush ws --severity=error --count=20 # Last 20 errors |
| 14 | drush php:eval "code" # Run PHP inline |
| 15 | drush sql:dump > dump.sql # Database dump |
| 16 | ``` |
| 17 | |
| 18 | ## Code Generators |
| 19 | |
| 20 | ```bash |
| 21 | drush generate # List all generators |
| 22 | drush gen module # Generate module (gen is alias) |
| 23 | drush generate controller |
| 24 | drush generate form-simple |
| 25 | drush generate form-config |
| 26 | drush generate service |
| 27 | drush generate plugin:block |
| 28 | drush generate plugin:field:formatter |
| 29 | drush generate plugin:field:widget |
| 30 | drush generate plugin:field:type |
| 31 | drush generate event-subscriber |
| 32 | drush generate hook |
| 33 | drush generate entity:content |
| 34 | drush generate entity:configuration |
| 35 | drush generate test:unit |
| 36 | drush generate test:kernel |
| 37 | drush generate test:browser |
| 38 | drush generate drush:command-file |
| 39 | ``` |
| 40 | |
| 41 | ## Non-Interactive Generation (--answers JSON) |
| 42 | |
| 43 | ```bash |
| 44 | # Generate module |
| 45 | drush generate module --answers='{ |
| 46 | "name": "My Module", |
| 47 | "machine_name": "my_module", |
| 48 | "description": "A custom module", |
| 49 | "package": "Custom", |
| 50 | "dependencies": "", |
| 51 | "install_file": "no", |
| 52 | "libraries": "no", |
| 53 | "permissions": "no", |
| 54 | "event_subscriber": "no", |
| 55 | "block_plugin": "no", |
| 56 | "controller": "no", |
| 57 | "settings_form": "no" |
| 58 | }' |
| 59 | |
| 60 | # Generate service |
| 61 | drush generate service --answers='{ |
| 62 | "module": "my_module", |
| 63 | "service_name": "my_module.helper", |
| 64 | "class": "HelperService", |
| 65 | "services": ["entity_type.manager", "logger.factory"] |
| 66 | }' |
| 67 | ``` |
| 68 | |
| 69 | ## Field Management |
| 70 | |
| 71 | ```bash |
| 72 | # Create field (interactive) |
| 73 | drush field:create |
| 74 | |
| 75 | # Create field (non-interactive) |
| 76 | drush field:create node article \ |
| 77 | --field-name=field_subtitle \ |
| 78 | --field-label="Subtitle" \ |
| 79 | --field-type=string \ |
| 80 | --field-widget=string_textfield \ |
| 81 | --is-required=0 \ |
| 82 | --cardinality=1 |
| 83 | |
| 84 | # List fields |
| 85 | drush field:info node article |
| 86 | |
| 87 | # Field types/widgets/formatters |
| 88 | drush field:types |
| 89 | drush field:widgets |
| 90 | drush field:formatters |
| 91 | |
| 92 | # Delete field |
| 93 | drush field:delete node.article.field_subtitle |
| 94 | ``` |
| 95 | |
| 96 | ## Discover Generator Prompts |
| 97 | |
| 98 | ```bash |
| 99 | # Preview what answers are needed |
| 100 | drush generate module -vvv --dry-run |
| 101 | |
| 102 | # Accept all defaults |
| 103 | drush generate module -y |
| 104 | ``` |
| 105 | |
| 106 | ## State & Config via CLI |
| 107 | |
| 108 | ```bash |
| 109 | # State |
| 110 | drush state:get my_module.last_run |
| 111 | drush state:set my_module.feature_enabled 1 |
| 112 | drush state:del my_module.last_run |
| 113 | |
| 114 | # Config |
| 115 | drush config:get my_module.settings |
| 116 | drush config:set my_module.settings enabled 1 |
| 117 | drush config:edit my_module.settings |
| 118 | ``` |
| 119 | |
| 120 | ## User Management |
| 121 | |
| 122 | ```bash |
| 123 | drush user:create testuser --mail="test@example.com" --password="password" |
| 124 | drush user:login # One-time login for uid 1 |
| 125 | drush user:login --uid=2 # One-time login for uid 2 |
| 126 | drush user:role:add editor testuser |
| 127 | drush user:block testuser |
| 128 | drush user:unblock testuser |
| 129 | ``` |
| 130 | |
| 131 | ## DDEV Wrapper |
| 132 | |
| 133 | ```bash |
| 134 | ddev drush cr |
| 135 | ddev drush cex -y |
| 136 | ddev drush generate module --answers='{...}' |
| 137 | ddev drush field:create node article |
| 138 | ``` |
| 139 | |
| 140 | ## Debugging Generated Code |
| 141 | |
| 142 | Examples assume a `docroot/`-based Drupal project. If your project uses `web/` or another document root, adjust paths accordingly. |
| 143 | |
| 144 | ```bash |
| 145 | # Syntax check |
| 146 | ddev exec php -l docroot/modules/custom/my_module/src/MyClass.php |
| 147 | |
| 148 | # Check service registration |
| 149 | ddev drush devel:services | grep my_module |
| 150 | |
| 151 | # Verify class autoloaded |
| 152 | ddev drush php:eval "class_exists('Drupal\my_module\MyClass') ? print 'Found' : print 'Not found';" |
| 153 | ``` |