diff --git a/craco.config.js b/craco.config.js new file mode 100644 index 0000000..5eb998f --- /dev/null +++ b/craco.config.js @@ -0,0 +1,24 @@ +const path = require("path"); + +module.exports = { + webpack: { + configure: (webpackConfig) => { + // Disable code splitting + webpackConfig.optimization.splitChunks = { + cacheGroups: { + default: false, + }, + }; + + webpackConfig.optimization.runtimeChunk = false; + + // Ensure output filename is a single file + webpackConfig.output.filename = "static/js/[name].bundle.js"; + + // Set the output directory to a specific folder + webpackConfig.output.path = path.resolve(__dirname, "build"); + + return webpackConfig; + }, + }, +}; diff --git a/package-lock.json b/package-lock.json index 3b702c6..1693725 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "underscore.string": "^3.3.4" }, "devDependencies": { + "@craco/craco": "^6.4.5", "@exabyte-io/cove.js": "2024.7.31-0", "@exabyte-io/eslint-config": "^2025.1.15-0", "@mat3ra/code": "^2024.3.25-3", @@ -2261,6 +2262,43 @@ "w3c-keyname": "^2.2.4" } }, + "node_modules/@craco/craco": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-6.4.5.tgz", + "integrity": "sha512-8F2rIAao8sEh0FPP52ViEvDM9GjJ7acq0knu1c8UgI+EuZMD5/ZB270ol6jV4iNY7it9Umg/RoGBvNRUNr8U8w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cosmiconfig": "^7.0.1", + "cosmiconfig-typescript-loader": "^1.0.0", + "cross-spawn": "^7.0.0", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "webpack-merge": "^4.2.2" + }, + "bin": { + "craco": "bin/craco.js" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "react-scripts": "^4.0.0" + } + }, + "node_modules/@craco/craco/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -10391,6 +10429,26 @@ "node": ">=10" } }, + "node_modules/cosmiconfig-typescript-loader": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz", + "integrity": "sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7", + "ts-node": "^10.7.0" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "typescript": ">=3" + } + }, "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -34332,6 +34390,16 @@ "node": ">= 4.0.0" } }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", diff --git a/package.json b/package.json index 09e305d..e3521d3 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "0.0.0", "description": "Web-based Atomic Viewer and Editor in JavaScript.", "scripts": { - "build": "SKIP_PREFLIGHT_CHECK=true react-scripts --openssl-legacy-provider build", - "start": "cross-env PORT=3002 SKIP_PREFLIGHT_CHECK=true react-scripts --openssl-legacy-provider start", + "build": "SKIP_PREFLIGHT_CHECK=true craco --openssl-legacy-provider build", + "start": "cross-env PORT=3002 SKIP_PREFLIGHT_CHECK=true craco --openssl-legacy-provider start", "transpile": "tsc && npm run copy-css", "copy-css": "mkdir -p dist/stylesheets && cp src/stylesheets/* dist/stylesheets/", "prestart": "npm-link-shared ./node_modules/@exabyte-io/cove.js/node_modules . react", @@ -60,6 +60,7 @@ "react-dom": "^17.0.0" }, "devDependencies": { + "@craco/craco": "^6.4.5", "@exabyte-io/cove.js": "2024.7.31-0", "@exabyte-io/eslint-config": "^2025.1.15-0", "@mat3ra/code": "^2024.3.25-3",