const fs = require('fs-extra'); const path = require('path'); module.exports = function(packagePath) { const nodeModulesPath = path.join(packagePath, 'node_modules'); const nodeModulesBackupPath = path.join(packagePath, 'node_modules.bak'); if (fs.existsSync(nodeModulesBackupPath)) { throw new Error( 'Cannot back up ' + nodeModulesPath + '; ' + nodeModulesBackupPath + ' already exists' ); } // some packages may have no node_modules after deduping, but we still want // to "back-up" and later restore that fact if (!fs.existsSync(nodeModulesPath)) { const msg = 'Skipping backing up ' + nodeModulesPath + ' as it does not exist'; console.log(msg.gray); const restore = function stubRestoreNodeModules() { if (fs.existsSync(nodeModulesPath)) { fs.removeSync(nodeModulesPath); } }; return { restore, nodeModulesPath, nodeModulesBackupPath }; } fs.copySync(nodeModulesPath, nodeModulesBackupPath); const restore = function restoreNodeModules() { if (!fs.existsSync(nodeModulesBackupPath)) { throw new Error( 'Cannot restore ' + nodeModulesPath + '; ' + nodeModulesBackupPath + ' does not exist' ); } if (fs.existsSync(nodeModulesPath)) { fs.removeSync(nodeModulesPath); } fs.renameSync(nodeModulesBackupPath, nodeModulesPath); }; return { restore, nodeModulesPath, nodeModulesBackupPath }; };