Skip to content

Commit 3ca6c20

Browse files
WMS-31527 | feat: add cleanNpmCache utility and integrate into setup process
1 parent e4e0d08 commit 3ca6c20

3 files changed

Lines changed: 25 additions & 4 deletions

File tree

src/expo-launcher.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const httpProxy = require('http-proxy');
1010
const {
1111
exec
1212
} = require('./exec');
13-
const { readAndReplaceFileContent, isWindowsOS, isExpoWebPreviewContainer, getDestPathForWindows } = require('./utils');
13+
const { readAndReplaceFileContent, isWindowsOS, isExpoWebPreviewContainer, getDestPathForWindows, cleanNpmCache } = require('./utils');
1414
const crypto = require('crypto');
1515
const {VERSIONS, hasValidExpoVersion} = require('./requirements');
1616
const axios = require('axios');
@@ -336,6 +336,9 @@ async function setup(previewUrl, _clean, authToken) {
336336
taskLogger.resetProgressBar();
337337
taskLogger.setTotal(previewSteps[1].total)
338338
const syncProject = await setupProject(previewUrl, projectName, projectDir, authToken);
339+
if (_clean) {
340+
await cleanNpmCache(projectDir);
341+
}
339342
await transpile(projectDir, previewUrl, false);
340343
return {projectDir, syncProject};
341344
}

src/utils.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const crypto = require('crypto');
66
const logger = require('./logger');
77
const taskLogger = require('./custom-logger/task-logger').spinnerBar;
88
const loggerLabel = 'wm-reactnative-cli';
9-
9+
const { exec } = require('./exec');
1010

1111
function isWindowsOS() {
1212
return (os.platform() === "win32" || os.platform() === "win64");
@@ -64,11 +64,26 @@ async function getDestPathForWindows(mode, projectDir = ''){
6464
return destPath;
6565
}
6666

67+
async function cleanNpmCache(cwd) {
68+
try {
69+
taskLogger.start('Cleaning npm cache...');
70+
await exec('npm', ['cache', 'clean', '--force'], { cwd });
71+
taskLogger.succeed('Npm cache cleaned successfully');
72+
} catch (e) {
73+
logger.error({
74+
label: loggerLabel,
75+
message: `Npm cache clean failed: ${e}`
76+
});
77+
taskLogger.fail('Npm cache clean failed');
78+
}
79+
}
80+
6781
module.exports = {
6882
isWindowsOS: isWindowsOS,
6983
readAndReplaceFileContent: readAndReplaceFileContent,
7084
iterateFiles: iterateFiles,
7185
streamToString: streamToString,
7286
isExpoWebPreviewContainer: isExpoWebPreviewContainer,
73-
getDestPathForWindows: getDestPathForWindows
87+
getDestPathForWindows: getDestPathForWindows,
88+
cleanNpmCache: cleanNpmCache
7489
};

src/web-preview-launcher.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const httpProxy = require('http-proxy');
1212
const {
1313
exec
1414
} = require('./exec');
15-
const { readAndReplaceFileContent, streamToString, isExpoWebPreviewContainer } = require('./utils');
15+
const { readAndReplaceFileContent, streamToString, isExpoWebPreviewContainer, cleanNpmCache } = require('./utils');
1616
const axios = require('axios');
1717
const { setupProject } = require('./project-sync.service');
1818
const taskLogger = require('./custom-logger/task-logger').spinnerBar;
@@ -375,6 +375,9 @@ async function setup(previewUrl, _clean, authToken) {
375375
taskLogger.incrementProgress(1);
376376
taskLogger.succeed(previewSteps[0].succeed);
377377
const syncProject = await setupProject(previewUrl, projectName, projectDir, authToken);
378+
if (_clean) {
379+
await cleanNpmCache(projectDir);
380+
}
378381
taskLogger.start(previewSteps[3].start);
379382
taskLogger.setTotal(previewSteps[3].total);
380383
await transpile(projectDir, previewUrl, false);

0 commit comments

Comments
 (0)