Skip to content

Commit bef630a

Browse files
committed
Fix jsconfig support with CRA (#9324)
Fix jsconfig support with CRA
1 parent bce8aa4 commit bef630a

File tree

3 files changed

+10
-46
lines changed

3 files changed

+10
-46
lines changed

app/react/src/server/__snapshots__/cra-config.test.ts.snap

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Object {
4141
"resolve": Object {
4242
"alias": Object {
4343
"baseAlias": "base-alias",
44+
"react-native": "react-native-web",
4445
},
4546
"extensions": Array [
4647
".js",
@@ -109,6 +110,7 @@ Object {
109110
"resolve": Object {
110111
"alias": Object {
111112
"baseAlias": "base-alias",
113+
"react-native": "react-native-web",
112114
},
113115
"extensions": Array [
114116
".js",

app/react/src/server/cra-config.test.ts

+1-21
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
/* eslint-disable jest/no-mocks-import */
22
import fs from 'fs';
33
import path from 'path';
4-
import {
5-
applyCRAWebpackConfig,
6-
getModulePath,
7-
getReactScriptsPath,
8-
getTypeScriptRules,
9-
} from './cra-config';
4+
import { applyCRAWebpackConfig, getReactScriptsPath, getTypeScriptRules } from './cra-config';
105
import mockRules from './__mocks__/mockRules';
116
import mockConfig from './__mocks__/mockConfig';
127

@@ -95,21 +90,6 @@ exit $ret`
9590
rules.every(rule => rule.include.find(filePath => filePath.includes('.storybook')))
9691
).toBe(true);
9792
});
98-
99-
it('should get the baseUrl from a tsconfig.json', () => {
100-
jest.spyOn(path, 'join').mockImplementation(() => 'project/tsconfig.json');
101-
jest.mock(
102-
'project/tsconfig.json',
103-
() => ({
104-
compilerOptions: {
105-
baseUrl: 'src',
106-
},
107-
}),
108-
{ virtual: true }
109-
);
110-
expect(getModulePath()).toEqual('src');
111-
path.join.mockRestore();
112-
});
11393
});
11494

11595
describe('when used with react-scripts < 2.1.0', () => {

app/react/src/server/cra-config.ts

+7-25
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import MiniCssExtractPlugin from 'mini-css-extract-plugin';
66
import { normalizeCondition } from 'webpack/lib/RuleSet';
77
import { logger } from '@storybook/node-logger';
88

9-
const JSCONFIG = 'jsconfig.json';
10-
const TSCONFIG = 'tsconfig.json';
11-
129
const appDirectory = fs.realpathSync(process.cwd());
1310
const cssExtensions = ['.css', '.scss', '.sass'];
1411
const cssModuleExtensions = ['.module.css', '.module.scss', '.module.sass'];
@@ -114,23 +111,6 @@ export const getTypeScriptRules = (webpackConfigRules: RuleSetRule[], configDir:
114111
}, [] as RuleSetRule[]);
115112
};
116113

117-
export const getModulePath = () => {
118-
// As with CRA, we only support `jsconfig.json` if `tsconfig.json` doesn't exist.
119-
let configName;
120-
if (fs.existsSync(path.join(appDirectory, TSCONFIG))) {
121-
configName = TSCONFIG;
122-
} else if (fs.existsSync(path.join(appDirectory, JSCONFIG))) {
123-
configName = JSCONFIG;
124-
}
125-
126-
if (configName) {
127-
// eslint-disable-next-line import/no-dynamic-require,global-require
128-
const config = require(path.join(appDirectory, configName));
129-
return config.compilerOptions && config.compilerOptions.baseUrl;
130-
}
131-
return false;
132-
};
133-
134114
function mergePlugins(basePlugins: Plugin[], additionalPlugins: Plugin[]) {
135115
return [...basePlugins, ...additionalPlugins].reduce((plugins, plugin) => {
136116
if (
@@ -171,10 +151,6 @@ export function applyCRAWebpackConfig(baseConfig: Configuration, configDir: stri
171151
const tsExtensions = hasTsSupport ? typeScriptExtensions : [];
172152
const extensions = [...cssExtensions, ...tsExtensions];
173153

174-
// Support for this was added in `[email protected]`.
175-
// https://github.com/facebook/create-react-app/pull/6656
176-
const modulePath = isReactScriptsInstalled('3.0.0') && getModulePath();
177-
178154
// Remove any rules from baseConfig that test true for any one of the extensions
179155
const filteredBaseRules = baseConfig.module.rules.filter(
180156
rule => !rule.test || !extensions.some(normalizeCondition(rule.test))
@@ -205,7 +181,13 @@ export function applyCRAWebpackConfig(baseConfig: Configuration, configDir: stri
205181
resolve: {
206182
...baseConfig.resolve,
207183
extensions: [...baseConfig.resolve.extensions, ...tsExtensions],
208-
modules: baseConfig.resolve.modules.concat(modulePath || []),
184+
modules: Array.from(
185+
new Set([...baseConfig.resolve.modules, ...(craWebpackConfig.resolve.modules || [])])
186+
),
187+
alias: {
188+
...baseConfig.resolve.alias,
189+
...craWebpackConfig.resolve.alias,
190+
},
209191
},
210192
resolveLoader: {
211193
modules: ['node_modules', path.join(getReactScriptsPath(), 'node_modules')],

0 commit comments

Comments
 (0)