one-image-optimizer 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/IMPLEMENTATION_GUIDE.md +367 -0
- package/MASTER_GUIDE.md +302 -0
- package/PROJECT_SUMMARY.md +328 -0
- package/QUICK_START.md +167 -0
- package/README.md +155 -0
- package/one-image-optimizer.config.js +29 -0
- package/package.json +30 -0
- package/scripts/postinstall.js +37 -0
- package/src/cli.js +9 -0
- package/src/emptythefolder.js +40 -0
- package/src/imagescompress.js +141 -0
- package/src/imgfolderrename.js +57 -0
- package/src/index.js +77 -0
- package/src/scripts/compress-only.js +35 -0
- package/src/scripts/empty-folders-only.js +52 -0
- package/src/scripts/rename-only.js +35 -0
- package/src/scripts/webp-only.js +35 -0
- package/src/utils.js +94 -0
- package/src/webpconverter.js +109 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# 📊 PROJECT ANALYSIS & IMPLEMENTATION SUMMARY
|
|
2
|
+
|
|
3
|
+
## 🔍 INITIAL ANALYSIS
|
|
4
|
+
|
|
5
|
+
### Files Analyzed:
|
|
6
|
+
1. ✅ `package.json` - Basic setup, needed updates
|
|
7
|
+
2. ✅ `src/index.js` - Simple function, needed orchestration logic
|
|
8
|
+
3. ✅ `src/cli.js` - Basic CLI, needed async support
|
|
9
|
+
4. ✅ `src/imagescompress.js` - Had hardcoded paths, auto-executed
|
|
10
|
+
5. ✅ `src/imgfolderrename.js` - Had hardcoded paths, auto-executed
|
|
11
|
+
6. ✅ `src/webpconverter.js` - ES6 imports, hardcoded paths, auto-executed
|
|
12
|
+
7. ✅ `src/emptythefolder.js` - ES6 imports, hardcoded paths, auto-executed
|
|
13
|
+
|
|
14
|
+
### Issues Found:
|
|
15
|
+
❌ Hardcoded paths in all scripts
|
|
16
|
+
❌ Scripts auto-execute when imported
|
|
17
|
+
❌ Mixed ES6 and CommonJS modules
|
|
18
|
+
❌ No config file system
|
|
19
|
+
❌ No confirmation prompts
|
|
20
|
+
❌ No individual command support
|
|
21
|
+
❌ No postinstall script
|
|
22
|
+
❌ Missing dependencies in package.json
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## ✅ CHANGES IMPLEMENTED
|
|
27
|
+
|
|
28
|
+
### 1. **Package Configuration** (`package.json`)
|
|
29
|
+
**Changes:**
|
|
30
|
+
- ✅ Added all required dependencies (sharp, fs-extra, inquirer, chalk)
|
|
31
|
+
- ✅ Added npm scripts for all commands
|
|
32
|
+
- ✅ Added postinstall script
|
|
33
|
+
- ✅ Fixed bin configuration
|
|
34
|
+
- ✅ Updated version to 1.0.0
|
|
35
|
+
|
|
36
|
+
**Result:** Package is now properly configured for npm publishing
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
### 2. **Config System** (NEW)
|
|
41
|
+
**Files Created:**
|
|
42
|
+
- ✅ `one-image-optimizer.config.js` - Template config file
|
|
43
|
+
- ✅ `scripts/postinstall.js` - Auto-creates config on install
|
|
44
|
+
- ✅ `src/utils.js` - Config loader, validation, and prompts
|
|
45
|
+
|
|
46
|
+
**Result:** Users can now configure paths without editing code
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### 3. **Core Scripts Refactoring**
|
|
51
|
+
|
|
52
|
+
#### `src/imagescompress.js`
|
|
53
|
+
**Changes:**
|
|
54
|
+
- ✅ Removed hardcoded path `'imagescompress/images'`
|
|
55
|
+
- ✅ Added `config` parameter to all functions
|
|
56
|
+
- ✅ Removed auto-execution (`compressImageMain().catch(...)`)
|
|
57
|
+
- ✅ Uses config values for thresholds and quality
|
|
58
|
+
- ✅ Better console output with emojis
|
|
59
|
+
|
|
60
|
+
**Result:** Script is now reusable and configurable
|
|
61
|
+
|
|
62
|
+
#### `src/imgfolderrename.js`
|
|
63
|
+
**Changes:**
|
|
64
|
+
- ✅ Removed hardcoded path `'imgfolderrename/images'`
|
|
65
|
+
- ✅ Added `config` parameter
|
|
66
|
+
- ✅ Removed auto-execution
|
|
67
|
+
- ✅ Added progress tracking (totalRenamed counter)
|
|
68
|
+
- ✅ Better console output
|
|
69
|
+
|
|
70
|
+
**Result:** Script is now reusable and configurable
|
|
71
|
+
|
|
72
|
+
#### `src/webpconverter.js`
|
|
73
|
+
**Changes:**
|
|
74
|
+
- ✅ Converted ES6 imports to CommonJS (`require`)
|
|
75
|
+
- ✅ Removed hardcoded path
|
|
76
|
+
- ✅ Added `config` parameter
|
|
77
|
+
- ✅ Removed auto-execution
|
|
78
|
+
- ✅ Uses config.WEBP_QUALITY
|
|
79
|
+
- ✅ Better console output (shows basename only)
|
|
80
|
+
|
|
81
|
+
**Result:** Script is now compatible and configurable
|
|
82
|
+
|
|
83
|
+
#### `src/emptythefolder.js`
|
|
84
|
+
**Changes:**
|
|
85
|
+
- ✅ Converted ES6 imports to CommonJS
|
|
86
|
+
- ✅ Removed hardcoded path
|
|
87
|
+
- ✅ Added `config` parameter
|
|
88
|
+
- ✅ Removed auto-execution
|
|
89
|
+
- ✅ Added file counter
|
|
90
|
+
- ✅ Better console output
|
|
91
|
+
|
|
92
|
+
**Result:** Script is now compatible and configurable
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 4. **Main Orchestrator** (`src/index.js`)
|
|
97
|
+
**Complete Rewrite:**
|
|
98
|
+
- ✅ Loads config using `loadConfig()`
|
|
99
|
+
- ✅ Displays warning message
|
|
100
|
+
- ✅ Gets user confirmation before proceeding
|
|
101
|
+
- ✅ Runs all scripts sequentially with config
|
|
102
|
+
- ✅ Shows progress for each step (1/3, 2/3, 3/3)
|
|
103
|
+
- ✅ Beautiful colored output using chalk
|
|
104
|
+
- ✅ Proper error handling
|
|
105
|
+
- ✅ Success summary at the end
|
|
106
|
+
|
|
107
|
+
**Result:** Professional user experience with safety features
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### 5. **CLI Entry Point** (`src/cli.js`)
|
|
112
|
+
**Changes:**
|
|
113
|
+
- ✅ Updated to call async function
|
|
114
|
+
- ✅ Added error handling
|
|
115
|
+
- ✅ Proper exit codes
|
|
116
|
+
|
|
117
|
+
**Result:** CLI works correctly with async operations
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
### 6. **Individual Command Scripts** (NEW)
|
|
122
|
+
**Files Created:**
|
|
123
|
+
- ✅ `src/scripts/compress-only.js` - Run compress only
|
|
124
|
+
- ✅ `src/scripts/webp-only.js` - Run webp only
|
|
125
|
+
- ✅ `src/scripts/empty-folders-only.js` - Run empty only (with extra confirmation)
|
|
126
|
+
|
|
127
|
+
**Result:** Users can run individual operations
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
### 7. **Documentation** (NEW)
|
|
132
|
+
**Files Created:**
|
|
133
|
+
- ✅ `README.md` - User-facing documentation
|
|
134
|
+
- ✅ `IMPLEMENTATION_GUIDE.md` - Developer guide
|
|
135
|
+
- ✅ `QUICK_START.md` - Quick reference
|
|
136
|
+
- ✅ `.npmignore` - Exclude test files from package
|
|
137
|
+
|
|
138
|
+
**Result:** Complete documentation for users and developers
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 🎯 FEATURE IMPLEMENTATION STATUS
|
|
143
|
+
|
|
144
|
+
| Feature | Status | Implementation |
|
|
145
|
+
|---------|--------|----------------|
|
|
146
|
+
| Auto-create config file | ✅ DONE | `scripts/postinstall.js` |
|
|
147
|
+
| User sets ROOT_FOLDER | ✅ DONE | `one-image-optimizer.config.js` |
|
|
148
|
+
| Confirmation prompt | ✅ DONE | `src/utils.js` + `src/index.js` |
|
|
149
|
+
| Sequential script execution | ✅ DONE | `src/index.js` (async/await) |
|
|
150
|
+
| Compress images > 1MB | ✅ DONE | `src/imagescompress.js` |
|
|
151
|
+
| Rename by folder name | ✅ DONE | `src/imgfolderrename.js` |
|
|
152
|
+
| Convert to WebP | ✅ DONE | `src/webpconverter.js` |
|
|
153
|
+
| Individual commands | ✅ DONE | `src/scripts/*.js` |
|
|
154
|
+
| Empty folders command | ✅ DONE | `src/emptythefolder.js` |
|
|
155
|
+
| Config-based paths | ✅ DONE | All scripts use config |
|
|
156
|
+
| Windows file lock handling | ✅ DONE | Built into compress script |
|
|
157
|
+
| Colored console output | ✅ DONE | Using chalk |
|
|
158
|
+
| Error handling | ✅ DONE | Try-catch blocks everywhere |
|
|
159
|
+
| Progress tracking | ✅ DONE | Step indicators |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 📦 DEPENDENCIES INSTALLED
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"sharp": "^0.33.0", // Image processing
|
|
168
|
+
"fs-extra": "^11.2.0", // Enhanced file operations
|
|
169
|
+
"inquirer": "^8.2.5", // User prompts
|
|
170
|
+
"chalk": "^4.1.2" // Colored console output
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Status:** ✅ All installed successfully
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 🎮 AVAILABLE COMMANDS
|
|
179
|
+
|
|
180
|
+
### For Development/Testing:
|
|
181
|
+
```bash
|
|
182
|
+
npm run one-image-optimizer # Full optimization
|
|
183
|
+
npm run compress # Compress only
|
|
184
|
+
npm run webp # WebP only
|
|
185
|
+
npm run empty-folders # Empty folders
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### For Publishing:
|
|
189
|
+
```bash
|
|
190
|
+
npm login # Login to npm
|
|
191
|
+
npm publish # Publish package
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### For Users (after install):
|
|
195
|
+
```bash
|
|
196
|
+
npm install one-image-optimizer
|
|
197
|
+
npm run one-image-optimizer
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 🔄 USER WORKFLOW
|
|
203
|
+
|
|
204
|
+
1. **Install:** `npm install one-image-optimizer`
|
|
205
|
+
2. **Auto-setup:** Config file created automatically
|
|
206
|
+
3. **Configure:** Edit `one-image-optimizer.config.js`
|
|
207
|
+
4. **Run:** `npm run one-image-optimizer`
|
|
208
|
+
5. **Confirm:** Answer "yes" to confirmation prompt
|
|
209
|
+
6. **Wait:** Scripts run sequentially
|
|
210
|
+
7. **Done:** Images optimized!
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 🚀 EXECUTION FLOW
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
User runs: npm run one-image-optimizer
|
|
218
|
+
↓
|
|
219
|
+
src/cli.js (entry point)
|
|
220
|
+
↓
|
|
221
|
+
src/index.js (main orchestrator)
|
|
222
|
+
↓
|
|
223
|
+
Load config (src/utils.js)
|
|
224
|
+
↓
|
|
225
|
+
Display warning
|
|
226
|
+
↓
|
|
227
|
+
Get confirmation (inquirer)
|
|
228
|
+
↓
|
|
229
|
+
If YES:
|
|
230
|
+
↓
|
|
231
|
+
STEP 1: src/imagescompress.js (compress > 1MB)
|
|
232
|
+
↓
|
|
233
|
+
STEP 2: src/imgfolderrename.js (rename by folder)
|
|
234
|
+
↓
|
|
235
|
+
STEP 3: src/webpconverter.js (convert to WebP)
|
|
236
|
+
↓
|
|
237
|
+
Success message
|
|
238
|
+
↓
|
|
239
|
+
If NO:
|
|
240
|
+
↓
|
|
241
|
+
Cancel operation
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 📝 CONFIGURATION OPTIONS
|
|
247
|
+
|
|
248
|
+
Users can customize in `one-image-optimizer.config.js`:
|
|
249
|
+
|
|
250
|
+
```javascript
|
|
251
|
+
{
|
|
252
|
+
ROOT_FOLDER: './assets/images', // Where images are
|
|
253
|
+
COMPRESS_THRESHOLD_MB: 1, // Compress if > this size
|
|
254
|
+
MAX_WIDTH: 1920, // Max width after compress
|
|
255
|
+
MAX_HEIGHT: 1080, // Max height after compress
|
|
256
|
+
WEBP_QUALITY: 80, // WebP quality (0-100)
|
|
257
|
+
JPEG_QUALITY: 75, // JPEG quality (0-100)
|
|
258
|
+
IMAGE_EXTENSIONS: [...] // Supported formats
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## ✅ TESTING CHECKLIST
|
|
265
|
+
|
|
266
|
+
Before publishing, test:
|
|
267
|
+
|
|
268
|
+
- [ ] Config file is created on install
|
|
269
|
+
- [ ] Config validation works
|
|
270
|
+
- [ ] Confirmation prompt appears
|
|
271
|
+
- [ ] Compress script works
|
|
272
|
+
- [ ] Rename script works
|
|
273
|
+
- [ ] WebP conversion works
|
|
274
|
+
- [ ] Individual commands work
|
|
275
|
+
- [ ] Error handling works
|
|
276
|
+
- [ ] Windows file locks handled
|
|
277
|
+
- [ ] Console output looks good
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 🎉 READY FOR PUBLISHING
|
|
282
|
+
|
|
283
|
+
**Current Status:** ✅ ALL FEATURES IMPLEMENTED
|
|
284
|
+
|
|
285
|
+
**Next Steps:**
|
|
286
|
+
1. Test locally with sample images
|
|
287
|
+
2. Fix any bugs found during testing
|
|
288
|
+
3. Update author info in package.json
|
|
289
|
+
4. Publish to npm
|
|
290
|
+
5. Test published package
|
|
291
|
+
6. Share with users!
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## 📊 CODE QUALITY IMPROVEMENTS
|
|
296
|
+
|
|
297
|
+
### Before:
|
|
298
|
+
- ❌ Hardcoded paths everywhere
|
|
299
|
+
- ❌ Scripts run immediately on import
|
|
300
|
+
- ❌ No user confirmation
|
|
301
|
+
- ❌ Mixed module systems
|
|
302
|
+
- ❌ No configuration system
|
|
303
|
+
- ❌ Poor error handling
|
|
304
|
+
|
|
305
|
+
### After:
|
|
306
|
+
- ✅ Config-based paths
|
|
307
|
+
- ✅ Scripts are functions, not auto-run
|
|
308
|
+
- ✅ Confirmation prompts
|
|
309
|
+
- ✅ Consistent CommonJS
|
|
310
|
+
- ✅ Robust config system
|
|
311
|
+
- ✅ Comprehensive error handling
|
|
312
|
+
- ✅ Beautiful console output
|
|
313
|
+
- ✅ Professional user experience
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 🏆 ACHIEVEMENT UNLOCKED
|
|
318
|
+
|
|
319
|
+
You now have a **production-ready npm package** with:
|
|
320
|
+
- ✅ Professional code structure
|
|
321
|
+
- ✅ User-friendly interface
|
|
322
|
+
- ✅ Complete documentation
|
|
323
|
+
- ✅ Safety features
|
|
324
|
+
- ✅ Individual command support
|
|
325
|
+
- ✅ Auto-configuration
|
|
326
|
+
- ✅ Cross-platform support
|
|
327
|
+
|
|
328
|
+
**Ready to publish and share with the world! 🚀**
|
package/QUICK_START.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# 🎯 QUICK START GUIDE
|
|
2
|
+
|
|
3
|
+
## ✅ COMPLETED SETUP
|
|
4
|
+
|
|
5
|
+
All files have been created and dependencies installed successfully!
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📋 WHAT TO DO NOW (Step-by-Step)
|
|
10
|
+
|
|
11
|
+
### **STEP 1: Test Locally First** ⚡
|
|
12
|
+
|
|
13
|
+
Before publishing, let's test the package:
|
|
14
|
+
|
|
15
|
+
1. **Create a test folder with images:**
|
|
16
|
+
```bash
|
|
17
|
+
mkdir test-images
|
|
18
|
+
mkdir "test-images/Product Photos"
|
|
19
|
+
mkdir "test-images/Hero Images"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. **Copy some test images** (JPG/PNG files) into these folders
|
|
23
|
+
|
|
24
|
+
3. **Edit the config file** that was just created:
|
|
25
|
+
- Open: `one-image-optimizer.config.js`
|
|
26
|
+
- Change `ROOT_FOLDER: './assets/images'` to `ROOT_FOLDER: './test-images'`
|
|
27
|
+
|
|
28
|
+
4. **Run the optimizer:**
|
|
29
|
+
```bash
|
|
30
|
+
npm run one-image-optimizer
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
5. **Test individual commands:**
|
|
34
|
+
```bash
|
|
35
|
+
npm run compress
|
|
36
|
+
npm run webp
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### **STEP 2: Publish to npm** 📦
|
|
42
|
+
|
|
43
|
+
Once testing is successful:
|
|
44
|
+
|
|
45
|
+
1. **Login to npm:**
|
|
46
|
+
```bash
|
|
47
|
+
npm login
|
|
48
|
+
```
|
|
49
|
+
(Create account at https://npmjs.com if needed)
|
|
50
|
+
|
|
51
|
+
2. **Update package.json:**
|
|
52
|
+
- Change `"author": "Your Name"` to your actual name
|
|
53
|
+
- Add your email and repository URL
|
|
54
|
+
|
|
55
|
+
3. **Publish:**
|
|
56
|
+
```bash
|
|
57
|
+
npm publish
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
4. **If name is taken**, update package.json:
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"name": "@yourusername/one-image-optimizer"
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 🎮 COMMANDS AVAILABLE
|
|
70
|
+
|
|
71
|
+
| Command | Description |
|
|
72
|
+
|---------|-------------|
|
|
73
|
+
| `npm run one-image-optimizer` | Run full optimization (compress → rename → webp) |
|
|
74
|
+
| `npm run compress` | Compress images > 1MB only |
|
|
75
|
+
| `npm run webp` | Convert to WebP only |
|
|
76
|
+
| `npm run empty-folders` | Delete all files (⚠️ destructive) |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 📁 FILES CREATED
|
|
81
|
+
|
|
82
|
+
✅ `package.json` - Package configuration with all dependencies
|
|
83
|
+
✅ `src/cli.js` - CLI entry point
|
|
84
|
+
✅ `src/index.js` - Main orchestrator with confirmation prompts
|
|
85
|
+
✅ `src/utils.js` - Config loader and utilities
|
|
86
|
+
✅ `src/imagescompress.js` - Compression logic (refactored)
|
|
87
|
+
✅ `src/imgfolderrename.js` - Rename logic (refactored)
|
|
88
|
+
✅ `src/webpconverter.js` - WebP conversion (refactored)
|
|
89
|
+
✅ `src/emptythefolder.js` - Empty folders logic (refactored)
|
|
90
|
+
✅ `src/scripts/compress-only.js` - Individual compress command
|
|
91
|
+
✅ `src/scripts/webp-only.js` - Individual webp command
|
|
92
|
+
✅ `src/scripts/empty-folders-only.js` - Individual empty command
|
|
93
|
+
✅ `scripts/postinstall.js` - Auto-creates config file
|
|
94
|
+
✅ `one-image-optimizer.config.js` - Config template
|
|
95
|
+
✅ `README.md` - User documentation
|
|
96
|
+
✅ `.npmignore` - Exclude test files from package
|
|
97
|
+
✅ `IMPLEMENTATION_GUIDE.md` - Full implementation guide
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## 🔧 HOW IT WORKS
|
|
102
|
+
|
|
103
|
+
### When users install your package:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm install one-image-optimizer
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
1. ✅ Package is installed to `node_modules/`
|
|
110
|
+
2. ✅ Postinstall script runs automatically
|
|
111
|
+
3. ✅ Config file `one-image-optimizer.config.js` is created in their project root
|
|
112
|
+
4. ✅ User edits config to set their image folder path
|
|
113
|
+
5. ✅ User runs: `npm run one-image-optimizer`
|
|
114
|
+
6. ✅ Confirmation prompt appears
|
|
115
|
+
7. ✅ All optimizations run in sequence:
|
|
116
|
+
- Compress images > 1MB
|
|
117
|
+
- Rename based on folder names
|
|
118
|
+
- Convert to WebP format
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## ⚙️ KEY FEATURES IMPLEMENTED
|
|
123
|
+
|
|
124
|
+
✅ **Auto-config creation** - Config file created on install
|
|
125
|
+
✅ **Confirmation prompts** - User must confirm before changes
|
|
126
|
+
✅ **Sequential execution** - Scripts run one after another
|
|
127
|
+
✅ **Individual commands** - Can run each script separately
|
|
128
|
+
✅ **Config-based paths** - No hardcoded paths
|
|
129
|
+
✅ **Windows support** - File lock handling included
|
|
130
|
+
✅ **Colored output** - Beautiful console messages
|
|
131
|
+
✅ **Error handling** - Graceful error messages
|
|
132
|
+
✅ **Progress tracking** - Shows step-by-step progress
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 🚨 IMPORTANT NOTES
|
|
137
|
+
|
|
138
|
+
1. **Test thoroughly** before publishing
|
|
139
|
+
2. **Use test images** you don't mind modifying
|
|
140
|
+
3. **Backup important images** before running
|
|
141
|
+
4. **The empty-folders command is destructive** - use with caution
|
|
142
|
+
5. **Package name must be unique** on npm
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 📞 NEXT IMMEDIATE STEPS
|
|
147
|
+
|
|
148
|
+
1. ✅ Dependencies installed ← **DONE**
|
|
149
|
+
2. ⏳ Create test folder with images ← **DO THIS NOW**
|
|
150
|
+
3. ⏳ Edit config file
|
|
151
|
+
4. ⏳ Run `npm run one-image-optimizer`
|
|
152
|
+
5. ⏳ Verify it works
|
|
153
|
+
6. ⏳ Publish to npm
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 📚 DOCUMENTATION
|
|
158
|
+
|
|
159
|
+
- **Full Guide:** `IMPLEMENTATION_GUIDE.md`
|
|
160
|
+
- **User Docs:** `README.md`
|
|
161
|
+
- **Config Template:** `one-image-optimizer.config.js`
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
**You're ready to test! 🚀**
|
|
166
|
+
|
|
167
|
+
Start by creating a test folder with some images and running the optimizer.
|
package/README.md
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# 🚀 One Image Optimizer
|
|
2
|
+
|
|
3
|
+
A powerful npm package tool to automatically compress, rename, and convert your images to WebP format.
|
|
4
|
+
|
|
5
|
+
## ✨ Features
|
|
6
|
+
|
|
7
|
+
- 🗜️ **Auto-compress** images larger than 1MB
|
|
8
|
+
- 🏷️ **Smart rename** images based on their folder names
|
|
9
|
+
- 🔄 **Convert to WebP** for optimal web performance
|
|
10
|
+
- 🗑️ **Empty folders** utility to clean up directories
|
|
11
|
+
- ⚙️ **Configurable** settings via config file
|
|
12
|
+
- ✅ **Safe** - Asks for confirmation before making changes
|
|
13
|
+
|
|
14
|
+
## 📦 Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install one-image-optimizer
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
After installation, a configuration file `one-image-optimizer.config.js` will be automatically created in your project root.
|
|
21
|
+
|
|
22
|
+
## 🛠️ Setup
|
|
23
|
+
|
|
24
|
+
1. **Edit the config file** that was created in your project root:
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
// one-image-optimizer.config.js
|
|
28
|
+
module.exports = {
|
|
29
|
+
ROOT_FOLDER: './assets/images', // 👈 Change this to your images folder
|
|
30
|
+
COMPRESS_THRESHOLD_MB: 1,
|
|
31
|
+
MAX_WIDTH: 1920,
|
|
32
|
+
MAX_HEIGHT: 1080,
|
|
33
|
+
WEBP_QUALITY: 80,
|
|
34
|
+
JPEG_QUALITY: 75,
|
|
35
|
+
IMAGE_EXTENSIONS: ['.jpg', '.jpeg', '.png', '.webp', '.gif', '.bmp', '.tiff']
|
|
36
|
+
};
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. **Set your `ROOT_FOLDER`** to point to your images directory
|
|
40
|
+
|
|
41
|
+
## 🎯 Usage
|
|
42
|
+
|
|
43
|
+
### Full Optimization (All Steps)
|
|
44
|
+
|
|
45
|
+
Run all optimization steps in sequence:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm run one-image-optimizer
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This will:
|
|
52
|
+
1. ✅ Compress all images larger than 1MB
|
|
53
|
+
2. ✅ Rename images based on folder names
|
|
54
|
+
3. ✅ Convert all images to WebP format
|
|
55
|
+
|
|
56
|
+
**Note:** You'll be asked to confirm before the process starts.
|
|
57
|
+
|
|
58
|
+
### Individual Commands
|
|
59
|
+
|
|
60
|
+
Run specific optimization steps:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Compress images only
|
|
64
|
+
npm run compress
|
|
65
|
+
|
|
66
|
+
# Convert to WebP only
|
|
67
|
+
npm run webp
|
|
68
|
+
|
|
69
|
+
# Empty all files in folders (⚠️ destructive!)
|
|
70
|
+
npm run empty-folders
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## 📋 How It Works
|
|
74
|
+
|
|
75
|
+
### 1. Compression
|
|
76
|
+
- Scans your `ROOT_FOLDER` for images larger than `COMPRESS_THRESHOLD_MB`
|
|
77
|
+
- Compresses them while maintaining quality
|
|
78
|
+
- Resizes to max dimensions if needed
|
|
79
|
+
|
|
80
|
+
### 2. Renaming
|
|
81
|
+
- Renames images based on their parent folder name
|
|
82
|
+
- Format: `{foldername}image1.jpg`, `{foldername}image2.jpg`, etc.
|
|
83
|
+
- Removes spaces from folder names
|
|
84
|
+
|
|
85
|
+
### 3. WebP Conversion
|
|
86
|
+
- Converts all images to WebP format
|
|
87
|
+
- Deletes original files after successful conversion
|
|
88
|
+
- Removes duplicate non-WebP versions
|
|
89
|
+
|
|
90
|
+
### 4. Empty Folders
|
|
91
|
+
- Deletes all files within the target folder
|
|
92
|
+
- Keeps folder structure intact
|
|
93
|
+
- **⚠️ Use with caution!**
|
|
94
|
+
|
|
95
|
+
## ⚙️ Configuration Options
|
|
96
|
+
|
|
97
|
+
| Option | Default | Description |
|
|
98
|
+
|--------|---------|-------------|
|
|
99
|
+
| `ROOT_FOLDER` | `'./assets/images'` | Root directory containing your images |
|
|
100
|
+
| `COMPRESS_THRESHOLD_MB` | `1` | Compress images larger than this (in MB) |
|
|
101
|
+
| `MAX_WIDTH` | `1920` | Maximum width for compressed images |
|
|
102
|
+
| `MAX_HEIGHT` | `1080` | Maximum height for compressed images |
|
|
103
|
+
| `WEBP_QUALITY` | `80` | WebP compression quality (0-100) |
|
|
104
|
+
| `JPEG_QUALITY` | `75` | JPEG compression quality (0-100) |
|
|
105
|
+
| `IMAGE_EXTENSIONS` | `['.jpg', '.jpeg', ...]` | Supported image formats |
|
|
106
|
+
|
|
107
|
+
## 🔒 Safety Features
|
|
108
|
+
|
|
109
|
+
- ✅ Confirmation prompt before running full optimization
|
|
110
|
+
- ✅ Extra confirmation for destructive operations (empty-folders)
|
|
111
|
+
- ✅ Clear warnings about what will be changed
|
|
112
|
+
- ✅ Validates config file and paths before running
|
|
113
|
+
|
|
114
|
+
## 📝 Example Workflow
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# 1. Install the package
|
|
118
|
+
npm install one-image-optimizer
|
|
119
|
+
|
|
120
|
+
# 2. Edit one-image-optimizer.config.js
|
|
121
|
+
# Set ROOT_FOLDER to your images directory
|
|
122
|
+
|
|
123
|
+
# 3. Run full optimization
|
|
124
|
+
npm run one-image-optimizer
|
|
125
|
+
|
|
126
|
+
# 4. Or run individual commands
|
|
127
|
+
npm run compress
|
|
128
|
+
npm run webp
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## 🐛 Troubleshooting
|
|
132
|
+
|
|
133
|
+
### Config file not found
|
|
134
|
+
- Make sure `one-image-optimizer.config.js` exists in your project root
|
|
135
|
+
- Run `npm install` again to recreate it
|
|
136
|
+
|
|
137
|
+
### Path does not exist
|
|
138
|
+
- Check that `ROOT_FOLDER` in your config points to a valid directory
|
|
139
|
+
- Use relative paths from your project root (e.g., `./assets/images`)
|
|
140
|
+
|
|
141
|
+
### Permission errors on Windows
|
|
142
|
+
- The tool includes Windows file lock handling
|
|
143
|
+
- If issues persist, close any programs that might be using the images
|
|
144
|
+
|
|
145
|
+
## 📄 License
|
|
146
|
+
|
|
147
|
+
MIT
|
|
148
|
+
|
|
149
|
+
## 🤝 Contributing
|
|
150
|
+
|
|
151
|
+
Issues and pull requests are welcome!
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
Made with ❤️ for optimizing images
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ONE IMAGE OPTIMIZER - Configuration File
|
|
3
|
+
*
|
|
4
|
+
* This file was auto-generated when you installed one-image-optimizer.
|
|
5
|
+
*
|
|
6
|
+
* INSTRUCTIONS:
|
|
7
|
+
* 1. Set your ROOT_FOLDER path below (the folder containing your images)
|
|
8
|
+
* 2. Run: npm run one-image-optimizer
|
|
9
|
+
*
|
|
10
|
+
* INDIVIDUAL COMMANDS:
|
|
11
|
+
* - npm run compress (compress images > 1MB)
|
|
12
|
+
* - npm run webp (convert all to webp)
|
|
13
|
+
* - npm run empty-folders (delete all files in folders)
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
// 👇 CHANGE THIS to your images root folder path
|
|
18
|
+
ROOT_FOLDER: "./assets/images",
|
|
19
|
+
|
|
20
|
+
// Compression settings
|
|
21
|
+
COMPRESS_THRESHOLD_MB: 1, // Compress images larger than this
|
|
22
|
+
MAX_WIDTH: 1920,
|
|
23
|
+
MAX_HEIGHT: 1080,
|
|
24
|
+
WEBP_QUALITY: 80,
|
|
25
|
+
JPEG_QUALITY: 75,
|
|
26
|
+
|
|
27
|
+
// File extensions to process
|
|
28
|
+
IMAGE_EXTENSIONS: [".jpg", ".jpeg", ".png", ".webp", ".gif", ".bmp", ".tiff"],
|
|
29
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "one-image-optimizer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "src/index.js",
|
|
5
|
+
"description": "Optimize PNG, JPEG images by compressing them and converting them to webp format.",
|
|
6
|
+
"keywords": ["npm", "image", "optimizer", "webp", "compress", "tool"],
|
|
7
|
+
"author": "Your Name",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"bin": {
|
|
10
|
+
"one-image-optimizer": "src/cli.js"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"postinstall": "node scripts/postinstall.js",
|
|
14
|
+
"one-image-optimizer": "node src/cli.js",
|
|
15
|
+
"compress": "node src/scripts/compress-only.js",
|
|
16
|
+
"webp": "node src/scripts/webp-only.js",
|
|
17
|
+
"empty-folders": "node src/scripts/empty-folders-only.js",
|
|
18
|
+
"rename": "node src/scripts/rename-only.js"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"sharp": "^0.33.0",
|
|
22
|
+
"fs-extra": "^11.2.0",
|
|
23
|
+
"inquirer": "^8.2.5",
|
|
24
|
+
"chalk": "^4.1.2"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=14.0.0"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|