From 0a89b980dc0b3d4cbc6307081ed7c3c9eb096818 Mon Sep 17 00:00:00 2001 From: "gc.zhu" Date: Mon, 15 May 2023 15:30:39 +0800 Subject: [PATCH] handle resolve.symlinks --- .../backpack-addons/resolveSymlinks.js | 13 +++++ .../react-scripts/config/webpack.config.js | 55 +++++++++++-------- .../config/webpack.config.ssr.js | 5 +- 3 files changed, 49 insertions(+), 24 deletions(-) create mode 100644 packages/react-scripts/backpack-addons/resolveSymlinks.js diff --git a/packages/react-scripts/backpack-addons/resolveSymlinks.js b/packages/react-scripts/backpack-addons/resolveSymlinks.js new file mode 100644 index 0000000000..f21009339c --- /dev/null +++ b/packages/react-scripts/backpack-addons/resolveSymlinks.js @@ -0,0 +1,13 @@ +'use strict'; + +const paths = require('../config/paths'); +const appPackageJson = require(paths.appPackageJson); +const bpkReactScriptsConfig = appPackageJson['backpack-react-scripts'] || {}; +const resolveSymlinks = + bpkReactScriptsConfig.resolveSymlinks != undefined + ? bpkReactScriptsConfig.resolveSymlinks + : true; + +module.exports = { + symlinks: resolveSymlinks, +}; diff --git a/packages/react-scripts/config/webpack.config.js b/packages/react-scripts/config/webpack.config.js index 668bea819f..fd84be7a73 100644 --- a/packages/react-scripts/config/webpack.config.js +++ b/packages/react-scripts/config/webpack.config.js @@ -105,8 +105,8 @@ const hasJsxRuntime = (() => { } })(); -// The istanbul plugin is used to instrument code for coverage information, -// pass the config ENABLE_ISTANBUL_PLUGIN=true to enable the plugin. Be cautious this will +// The istanbul plugin is used to instrument code for coverage information, +// pass the config ENABLE_ISTANBUL_PLUGIN=true to enable the plugin. Be cautious this will // result in a large increasement on bundle size, so it should never be enabled in prod build. const enableIstanbulPlugin = process.env.ENABLE_ISTANBUL_PLUGIN === 'true'; @@ -191,20 +191,22 @@ module.exports = function (webpackEnv) { { loader: require.resolve('resolve-url-loader'), options: { - sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment, + sourceMap: isEnvProduction + ? shouldUseSourceMap + : isEnvDevelopment, root: paths.appSrc, }, }, { loader: require.resolve(preProcessor), options: { - ...preProcessorOptions, // #backpack-addons sassFunctions + ...preProcessorOptions, // #backpack-addons sassFunctions ...{ sourceMap: true, }, }, }, - ].filter(Boolean), + ].filter(Boolean) ); } return loaders; @@ -247,7 +249,7 @@ module.exports = function (webpackEnv) { ] : paths.appIndexJs, output: { - ...require('../backpack-addons/crossOriginLoading'), // #backpack-addon crossOriginLoading + ...require('../backpack-addons/crossOriginLoading'), // #backpack-addon crossOriginLoading // The build folder. path: isSsr() ? paths.appBuildWeb : paths.appBuild, // Add /* filename */ comments to generated require()s in the output. @@ -347,7 +349,7 @@ module.exports = function (webpackEnv) { }, }), ], - ...require('../backpack-addons/splitChunks')(isEnvDevelopment), // #backpack-addons splitChunks + ...require('../backpack-addons/splitChunks')(isEnvDevelopment), // #backpack-addons splitChunks ...require('../backpack-addons/runtimeChunk').runtimeChunk, // #backpack-addons runtimeChunk }, ...require('../backpack-addons/externals').externals(isEnvProduction), // #backpack-addons externals @@ -393,6 +395,7 @@ module.exports = function (webpackEnv) { reactRefreshOverlayEntry, ]), ], + ...require('../backpack-addons/resolveSymlinks'), // #backpack-addon resolveSymlinks }, resolveLoader: { plugins: [ @@ -423,7 +426,7 @@ module.exports = function (webpackEnv) { name: 'static/media/[name].[hash:8].[ext]', }, }, - require('../backpack-addons/amdExcludes'), // #backpack-addons amdExcludes + require('../backpack-addons/amdExcludes'), // #backpack-addons amdExcludes // "url" loader works like "file" loader except that it embeds assets // smaller than specified limit in bytes as data URLs to avoid requests. // A missing `test` is equivalent to a match. @@ -439,7 +442,7 @@ module.exports = function (webpackEnv) { // The preset includes JSX, Flow, TypeScript, and some ESnext features. { test: /\.(js|mjs|jsx|ts|tsx)$/, - include: require('../backpack-addons/babelIncludePrefixes')(), // #backpack-addon babelIncludePrefixes + include: require('../backpack-addons/babelIncludePrefixes')(), // #backpack-addon babelIncludePrefixes loader: require.resolve('babel-loader'), options: { customize: require.resolve( @@ -491,11 +494,11 @@ module.exports = function (webpackEnv) { require.resolve('react-refresh/babel'), enableIstanbulPlugin && [ require.resolve('babel-plugin-istanbul'), - { - // do not instrument code coverage for tests / storybook files - exclude: ["**/*.test.*", "**/*.stories.*"], - }, - ], + { + // do not instrument code coverage for tests / storybook files + exclude: ['**/*.test.*', '**/*.stories.*'], + }, + ], ].filter(Boolean), // This is a feature of `babel-loader` for webpack (not Babel itself). // It enables caching results in ./node_modules/.cache/babel-loader/ @@ -511,7 +514,7 @@ module.exports = function (webpackEnv) { { test: /\.(js|mjs|jsx|ts|tsx)$/, exclude: /\.storybook/, - include: require('../backpack-addons/babelIncludePrefixes')(), // #backpack-addon babelIncludePrefixes + include: require('../backpack-addons/babelIncludePrefixes')(), // #backpack-addon babelIncludePrefixes use: [ { loader: require.resolve('thread-loader'), @@ -625,7 +628,9 @@ module.exports = function (webpackEnv) { // of CSS. // By default we support CSS Modules with the extension .module.css { - test: require('../backpack-addons/cssModules').getStyleTestRegexes('css'), // #backpack-addons cssModulesEnabled + test: require('../backpack-addons/cssModules').getStyleTestRegexes( + 'css' + ), // #backpack-addons cssModulesEnabled exclude: cssModuleRegex, use: getStyleLoaders({ importLoaders: 1, @@ -642,7 +647,9 @@ module.exports = function (webpackEnv) { // Adds support for CSS Modules (https://github.com/css-modules/css-modules) // using the extension .module.css { - test: require('../backpack-addons/cssModules').getStyleTestRegexes('cssModule'), // #backpack-addons cssModulesEnabled + test: require('../backpack-addons/cssModules').getStyleTestRegexes( + 'cssModule' + ), // #backpack-addons cssModulesEnabled use: getStyleLoaders({ importLoaders: 1, sourceMap: isEnvProduction @@ -657,7 +664,9 @@ module.exports = function (webpackEnv) { // By default we support SASS Modules with the // extensions .module.scss or .module.sass { - test: require('../backpack-addons/cssModules').getStyleTestRegexes('sass'), // #backpack-addons cssModulesEnabled + test: require('../backpack-addons/cssModules').getStyleTestRegexes( + 'sass' + ), // #backpack-addons cssModulesEnabled exclude: sassModuleRegex, use: getStyleLoaders( { @@ -669,7 +678,7 @@ module.exports = function (webpackEnv) { : isEnvDevelopment, }, 'sass-loader', - require('../backpack-addons/sassFunctions') // #backpack-addons sassFunctions + require('../backpack-addons/sassFunctions') // #backpack-addons sassFunctions ), // Don't consider CSS imports dead code even if the // containing package claims to have no side effects. @@ -680,7 +689,9 @@ module.exports = function (webpackEnv) { // Adds support for CSS Modules, but using SASS // using the extension .module.scss or .module.sass { - test: require('../backpack-addons/cssModules').getStyleTestRegexes('sassModule'), // #backpack-addons cssModulesEnabled + test: require('../backpack-addons/cssModules').getStyleTestRegexes( + 'sassModule' + ), // #backpack-addons cssModulesEnabled use: getStyleLoaders( { // When using cache-loader, the total count of loaders is up to 4 including cache-loader below the css-loader @@ -694,7 +705,7 @@ module.exports = function (webpackEnv) { }, }, 'sass-loader', - require('../backpack-addons/sassFunctions') // #backpack-addons sassFunctions + require('../backpack-addons/sassFunctions') // #backpack-addons sassFunctions ), }, // "file" loader makes sure those assets get served by WebpackDevServer. @@ -824,7 +835,7 @@ module.exports = function (webpackEnv) { // both options are optional filename: 'static/css/[name].[contenthash:8].css', chunkFilename: 'static/css/[name].[contenthash:8].chunk.css', - ...require('../backpack-addons/ignoreCssWarnings') // #backpack-addon ignoreCssWarnings + ...require('../backpack-addons/ignoreCssWarnings'), // #backpack-addon ignoreCssWarnings }), // Generate an asset manifest file with the following content: // - "files" key: Mapping of all asset filenames to their corresponding diff --git a/packages/react-scripts/config/webpack.config.ssr.js b/packages/react-scripts/config/webpack.config.ssr.js index 3ed8c6910b..f43215c8de 100644 --- a/packages/react-scripts/config/webpack.config.ssr.js +++ b/packages/react-scripts/config/webpack.config.ssr.js @@ -77,7 +77,7 @@ const reactRefreshOverlayEntry = require.resolve( // The istanbul plugin is not required by ssr. Added it here only to // comply with BRS maintenance convention that plugin added to webpack.config.js -// needs to have an acccordingly config in webpack.config.ssr.js. It can be removed +// needs to have an acccordingly config in webpack.config.ssr.js. It can be removed // once such a convention is dropped. // const enableIstanbulPlugin = process.env.ENABLE_ISTANBUL_PLUGIN === 'true'; @@ -434,6 +434,7 @@ module.exports = function (webpackEnv) { reactRefreshOverlayEntry, ]), ], + ...require('../backpack-addons/resolveSymlinks'), // #backpack-addon resolveSymlinks }, resolveLoader: { plugins: [ @@ -532,7 +533,7 @@ module.exports = function (webpackEnv) { require.resolve('react-refresh/babel'), // The istanbul plugin is not required by ssr. Added it here only to // comply with BRS maintenance convention that plugin added to webpack.config.js - // needs to have an acccordingly config in webpack.config.ssr.js. It can be removed + // needs to have an acccordingly config in webpack.config.ssr.js. It can be removed // once such a convention is dropped. // enableIstanbulPlugin && [ // require.resolve('babel-plugin-istanbul'),