From a3f6987ca959a5cc75e17306fc5b63e8b72f8ce2 Mon Sep 17 00:00:00 2001 From: Eric Mc Sween <5454374+emcsween@users.noreply.github.com> Date: Thu, 4 Jan 2024 07:31:13 -0500 Subject: [PATCH] Merge pull request #15957 from overleaf/jpa-invalidate-babel-cache [web] after changing settings invalidate babel cache on webpack startup GitOrigin-RevId: 3d83c56d119bcbbd91ea71b0a85ad8e0a767b679 --- services/web/config/settings.defaults.js | 8 +++++++ .../macros/import-overleaf-module.macro.js | 3 +++ .../invalidate-babel-cache-if-needed.js | 24 +++++++++++++++++++ services/web/webpack.config.js | 4 ++++ 4 files changed, 39 insertions(+) create mode 100644 services/web/frontend/macros/invalidate-babel-cache-if-needed.js diff --git a/services/web/config/settings.defaults.js b/services/web/config/settings.defaults.js index 90993d71f6..e30bebfd89 100644 --- a/services/web/config/settings.defaults.js +++ b/services/web/config/settings.defaults.js @@ -2,6 +2,10 @@ const fs = require('fs') const Path = require('path') const { merge } = require('@overleaf/settings/merge') +// Automatically detect module imports that are included in this version of the application (SaaS, Server-CE, Server Pro). +// E.g. during a Server-CE build, we will not find imports for proprietary modules. +// +// Restart webpack after adding/removing modules. const MODULES_PATH = Path.join(__dirname, '../modules') const entryPointsIde = [] const entryPointsMain = [] @@ -837,6 +841,9 @@ module.exports = { overleafModuleImports: { // modules to import (an empty array for each set of modules) + // + // Restart webpack after making changes. + // createFileModes: [], devToolbar: [], gitBridge: [], @@ -863,6 +870,7 @@ module.exports = { managedGroupSubscriptionEnrollmentNotification: [], managedGroupEnrollmentInvite: [], ssoConfigurationModal: [], + // See comment at the definition of these variables. entryPointsIde, entryPointsMain, }, diff --git a/services/web/frontend/macros/import-overleaf-module.macro.js b/services/web/frontend/macros/import-overleaf-module.macro.js index 0ce07bb18c..4bb77cd7a1 100644 --- a/services/web/frontend/macros/import-overleaf-module.macro.js +++ b/services/web/frontend/macros/import-overleaf-module.macro.js @@ -1,4 +1,7 @@ const { createMacro, MacroError } = require('babel-plugin-macros') + +// This copy of the settings will be taken when webpack starts. +// Be sure to restart webpack after making changes to the settings. const Settings = require('@overleaf/settings') const macro = createMacro(importOverleafModuleMacro) diff --git a/services/web/frontend/macros/invalidate-babel-cache-if-needed.js b/services/web/frontend/macros/invalidate-babel-cache-if-needed.js new file mode 100644 index 0000000000..aea5193b22 --- /dev/null +++ b/services/web/frontend/macros/invalidate-babel-cache-if-needed.js @@ -0,0 +1,24 @@ +const fs = require('fs') +const Path = require('path') +const logger = require('@overleaf/logger') +const Settings = require('@overleaf/settings') + +module.exports = function invalidateBabelCacheIfNeeded() { + const cachePath = Path.join(__dirname, '../../node_modules/.cache') + const statePath = Path.join(cachePath, 'last-overleafModuleImports.json') + let lastState = '' + try { + lastState = fs.readFileSync(statePath, { encoding: 'utf-8' }) + } catch (e) {} + + const newState = JSON.stringify(Settings.overleafModuleImports) + if (lastState !== newState) { + logger.warn( + {}, + 'Detected change in overleafModuleImports, purging babel cache!' + ) + fs.rmSync(cachePath, { recursive: true, force: true, maxRetries: 5 }) + fs.mkdirSync(cachePath) + fs.writeFileSync(statePath, newState) + } +} diff --git a/services/web/webpack.config.js b/services/web/webpack.config.js index ebfe0afc7b..5b742a6436 100644 --- a/services/web/webpack.config.js +++ b/services/web/webpack.config.js @@ -9,6 +9,10 @@ const { } = require('./webpack-plugins/lezer-grammar-compiler') const PackageVersions = require('./app/src/infrastructure/PackageVersions') +const invalidateBabelCacheIfNeeded = require('./frontend/macros/invalidate-babel-cache-if-needed') + +// Make sure that babel-macros are re-evaluated after changing the modules config +invalidateBabelCacheIfNeeded() // Generate a hash of entry points, including modules const entryPoints = {