diff --git a/src/expo-launcher.js b/src/expo-launcher.js index 8f41179..4fc86d8 100644 --- a/src/expo-launcher.js +++ b/src/expo-launcher.js @@ -10,7 +10,7 @@ const httpProxy = require('http-proxy'); const { exec } = require('./exec'); -const { readAndReplaceFileContent, isWindowsOS, isExpoWebPreviewContainer, getDestPathForWindows } = require('./utils'); +const { readAndReplaceFileContent, isWindowsOS, isExpoWebPreviewContainer, getDestPathForWindows, cleanNpmCache } = require('./utils'); const crypto = require('crypto'); const {VERSIONS, hasValidExpoVersion} = require('./requirements'); const axios = require('axios'); @@ -336,6 +336,9 @@ async function setup(previewUrl, _clean, authToken) { taskLogger.resetProgressBar(); taskLogger.setTotal(previewSteps[1].total) const syncProject = await setupProject(previewUrl, projectName, projectDir, authToken); + if (_clean) { + await cleanNpmCache(projectDir); + } await transpile(projectDir, previewUrl, false); return {projectDir, syncProject}; } diff --git a/src/utils.js b/src/utils.js index f50e7e4..c977b43 100644 --- a/src/utils.js +++ b/src/utils.js @@ -6,7 +6,7 @@ const crypto = require('crypto'); const logger = require('./logger'); const taskLogger = require('./custom-logger/task-logger').spinnerBar; const loggerLabel = 'wm-reactnative-cli'; - +const { exec } = require('./exec'); function isWindowsOS() { return (os.platform() === "win32" || os.platform() === "win64"); @@ -64,11 +64,26 @@ async function getDestPathForWindows(mode, projectDir = ''){ return destPath; } +async function cleanNpmCache(cwd) { + try { + taskLogger.start('Cleaning npm cache...'); + await exec('npm', ['cache', 'clean', '--force'], { cwd }); + taskLogger.succeed('Npm cache cleaned successfully'); + } catch (e) { + logger.error({ + label: loggerLabel, + message: `Npm cache clean failed: ${e}` + }); + taskLogger.fail('Npm cache clean failed'); + } +} + module.exports = { isWindowsOS: isWindowsOS, readAndReplaceFileContent: readAndReplaceFileContent, iterateFiles: iterateFiles, streamToString: streamToString, isExpoWebPreviewContainer: isExpoWebPreviewContainer, - getDestPathForWindows: getDestPathForWindows + getDestPathForWindows: getDestPathForWindows, + cleanNpmCache: cleanNpmCache }; \ No newline at end of file diff --git a/src/web-preview-launcher.js b/src/web-preview-launcher.js index a693704..eef2b2b 100644 --- a/src/web-preview-launcher.js +++ b/src/web-preview-launcher.js @@ -12,7 +12,7 @@ const httpProxy = require('http-proxy'); const { exec } = require('./exec'); -const { readAndReplaceFileContent, streamToString, isExpoWebPreviewContainer } = require('./utils'); +const { readAndReplaceFileContent, streamToString, isExpoWebPreviewContainer, cleanNpmCache } = require('./utils'); const axios = require('axios'); const { setupProject } = require('./project-sync.service'); const taskLogger = require('./custom-logger/task-logger').spinnerBar; @@ -375,6 +375,9 @@ async function setup(previewUrl, _clean, authToken) { taskLogger.incrementProgress(1); taskLogger.succeed(previewSteps[0].succeed); const syncProject = await setupProject(previewUrl, projectName, projectDir, authToken); + if (_clean) { + await cleanNpmCache(projectDir); + } taskLogger.start(previewSteps[3].start); taskLogger.setTotal(previewSteps[3].total); await transpile(projectDir, previewUrl, false);