JavaScript
// Method 1: Simple migration
function migrateStorage() {
const oldData = localStorage.getItem('oldKey');
if (oldData) {
// Migrate to new format
const newData = {
version: 2,
data: JSON.parse(oldData)
};
localStorage.setItem('newKey', JSON.stringify(newData));
localStorage.removeItem('oldKey');
console.log('Migration complete');
}
}
// Method 2: Version-based migration
const STORAGE_VERSION = 2;
function checkAndMigrate() {
const currentVersion = localStorage.getItem('storageVersion');
if (!currentVersion || parseInt(currentVersion) < STORAGE_VERSION) {
console.log('Migration needed');
migrateToVersion(parseInt(currentVersion) || 1);
localStorage.setItem('storageVersion', STORAGE_VERSION.toString());
}
}
function migrateToVersion(fromVersion) {
if (fromVersion === 1) {
// Migrate from v1 to v2
const v1Data = localStorage.getItem('userData');
if (v1Data) {
const data = JSON.parse(v1Data);
const v2Data = {
...data,
metadata: {
createdAt: new Date().toISOString(),
version: 2
}
};
localStorage.setItem('userData', JSON.stringify(v2Data));
}
}
}
checkAndMigrate();
// Method 3: Migration with backup
function migrateWithBackup() {
// Create backup
const backup = {};
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
backup[key] = localStorage.getItem(key);
}
localStorage.setItem('backup_' + Date.now(), JSON.stringify(backup));
// Perform migration
try {
migrateStorage();
console.log('Migration successful');
} catch (e) {
console.error('Migration failed, restoring backup');
// Restore from backup
restoreBackup(backup);
}
}
function restoreBackup(backup) {
localStorage.clear();
Object.keys(backup).forEach(key => {
localStorage.setItem(key, backup[key]);
});
}
// Method 4: Progressive migration
function progressiveMigration() {
const migrationSteps = [
() => migrateStep1(),
() => migrateStep2(),
() => migrateStep3()
];
migrationSteps.forEach((step, index) => {
try {
step();
console.log(`Step ${index + 1} complete`);
} catch (e) {
console.error(`Step ${index + 1} failed:`, e);
throw e;
}
});
}
function migrateStep1() {
// Step 1 logic
}
function migrateStep2() {
// Step 2 logic
}
function migrateStep3() {
// Step 3 logic
}
// Method 5: Data transformation
function transformData(oldFormat) {
// Transform old format to new format
return {
id: oldFormat.userId,
name: oldFormat.fullName,
email: oldFormat.emailAddress,
settings: {
theme: oldFormat.theme || 'light',
notifications: oldFormat.notify || true
}
};
}
function migrateUserData() {
const oldData = localStorage.getItem('oldUserData');
if (oldData) {
const parsed = JSON.parse(oldData);
const newData = transformData(parsed);
localStorage.setItem('userData', JSON.stringify(newData));
localStorage.removeItem('oldUserData');
}
}Output
Migration complete Migration needed Step 1 complete Step 2 complete Step 3 complete
Migration updates storage format.
Migration Strategies
- Version-based
- Backup before migrate
- Progressive steps
- Data transformation
Best Practices
- Check version
- Create backups
- Test migrations
- Handle errors
Use Cases
- Schema changes
- Format updates
- Data restructuring
- Version upgrades
Important
- Always backup
- Test thoroughly
- Handle failures
- Document changes