PromucFlow_constructor/app/client/craco.build.config.js
Valera Melnikov 41a5110c85
chore: disable sourcemaps for non-prod builds and cleanup craco configs (#38706)
## Description
- reduce --max-old-space-size to 7168 for build. [Test for EE
here](https://github.com/appsmithorg/appsmith-ee/pull/5932).
- disable sourcemaps for non-prod build
- cleanup craco configs

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!CAUTION]
> 🔴 🔴 🔴 Some tests have failed.
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/12825105662>
> Commit: 80b63a627b312f486f0d0baccf8a7d98b810471d
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=12825105662&attempt=1&selectiontype=test&testsstatus=failed&specsstatus=fail"
target="_blank">Cypress dashboard</a>.
> Tags: @tag.All
> Spec: 
> The following are new failures, please fix them before merging the PR:
<ol>
>
<li>cypress/e2e/Regression/ClientSide/Binding/Api_withPageload_Input_spec.js</ol>
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master"
target="_blank">List of identified flaky tests</a>.
> <hr>Fri, 17 Jan 2025 09:34:32 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Configuration Updates**
	- Reduced memory allocation for the build process.
	- Updated Webpack configuration with Brotli compression.
	- Modified WebSocket settings for the development server.
	- Streamlined build configuration by removing unnecessary sections.

- **Performance Optimization**
	- Adjusted build memory limits.
	- Improved compression algorithm for build artifacts.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-01-17 12:35:34 +03:00

106 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* eslint-disable @typescript-eslint/no-var-requires */
const { merge } = require("webpack-merge");
const common = require("./craco.common.config.js");
const WorkboxPlugin = require("workbox-webpack-plugin");
const CompressionPlugin = require("compression-webpack-plugin");
const { RetryChunkLoadPlugin } = require("webpack-retry-chunk-load-plugin");
const FaroSourceMapUploaderPlugin = require("@grafana/faro-webpack-plugin");
const path = require("path");
const env = process.env.REACT_APP_ENVIRONMENT;
const isAirgap = process.env.REACT_APP_AIRGAP_ENABLED;
const plugins = [];
plugins.push(
new WorkboxPlugin.InjectManifest({
swSrc: "./src/serviceWorker.ts",
mode: "development",
swDest: "./pageService.js",
maximumFileSizeToCacheInBytes: 11 * 1024 * 1024,
exclude: [
// Dont cache source maps and PWA manifests.
// (These are the default values of the `exclude` option: https://developer.chrome.com/docs/workbox/reference/workbox-build/#type-WebpackPartial,
// so we need to specify them explicitly if were extending this array.)
/\.map$/,
/^manifest.*\.js$/,
// Dont cache the root html file
/index\.html/,
// Dont cache LICENSE.txt files emitted by CRA
// when a chunk includes some license comments
/LICENSE\.txt/,
// Dont cache static icons as there are hundreds of them, and caching them all
// one by one (as the service worker does it) keeps the network busy for a long time
// and delays the service worker installation
/\/*\.svg$/,
],
// Dont cache-bust JS and CSS chunks
dontCacheBustURLsMatching: /\.[0-9a-zA-Z]{8}\.chunk\.(js|css)$/,
}),
);
if (env === "PRODUCTION") {
plugins.push(
new FaroSourceMapUploaderPlugin({
appId: process.env.REACT_APP_FARO_APP_ID,
appName: process.env.REACT_APP_FARO_APP_NAME,
endpoint: process.env.REACT_APP_FARO_SOURCEMAP_UPLOAD_ENDPOINT,
stackId: process.env.REACT_APP_FARO_STACK_ID,
// instructions on how to obtain your API key are in the documentation
// https://grafana.com/docs/grafana-cloud/monitor-applications/frontend-observability/sourcemap-upload-plugins/#obtain-an-api-key
apiKey: process.env.REACT_APP_FARO_SOURCEMAP_UPLOAD_API_KEY,
gzipContents: true,
}),
);
}
plugins.push(
new CompressionPlugin({
algorithm: "brotliCompress",
filename: "[path][base].br",
test: /\.(js|css|html|svg)$/,
threshold: 10240,
minRatio: 0.8,
}),
);
plugins.push(
new RetryChunkLoadPlugin({
// optional value to set the amount of time in milliseconds before trying to load the chunk again. Default is 0
retryDelay: 3000,
// optional value to set the maximum number of retries to load the chunk. Default is 1
maxRetries: 2,
// optional code to be executed in the browser context if after all retries chunk is not loaded.
// if not set - nothing will happen and error will be returned to the chunk loader.
lastResortScript: "window.location.href='/404.html';",
}),
);
module.exports = merge(common, {
babel: {
plugins: ["babel-plugin-lodash"],
loaderOptions: {
cacheDirectory: false,
},
},
webpack: {
configure: {
devtool: env === "PRODUCTION" ? "source-map" : false,
plugins,
},
},
plugins: [
// Enable Airgap builds
{
plugin: {
overrideWebpackConfig: ({ context: { env, paths }, webpackConfig }) => {
if (env.REACT_APP_AIRGAP_ENABLED === "true" || isAirgap === "true") {
paths.appBuild = webpackConfig.output.path =
path.resolve("build_airgap");
}
return webpackConfig;
},
},
},
],
});