Skip to content

Commit deca477

Browse files
committed
fix(babel): fix crashes related to babel update
1 parent b912832 commit deca477

File tree

6 files changed

+59
-30
lines changed

6 files changed

+59
-30
lines changed

src/exportables/babel-preset.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
export * from '../internals/babel/local-babel-preset';
1+
/* eslint-disable import/no-commonjs */
2+
3+
module.exports = require('../internals/babel/local-babel-preset');

src/framework/common/router/_find-routes.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,22 @@
88
const config = require('../../../../lib/shared/framework-config');
99
const { asyncGlob } = require('../../../../lib/internals/util/util');
1010

11-
module.exports = async function getRouteDeclarations() {
11+
module.exports = function getRouteDeclarations() {
1212

1313
// config.routes
1414
const routeGlob = config.default.routes;
15-
const routeFiles = await asyncGlob(routeGlob);
1615

17-
const requireArray = `[${routeFiles.map(fileName => `require(${JSON.stringify(fileName)})`).join(',')}]`;
18-
let code = `const o = ${requireArray}; export default o;`;
16+
return asyncGlob(routeGlob).then(routeFiles => {
17+
const requireArray = `[${routeFiles.map(fileName => `require(${JSON.stringify(fileName)})`).join(',')}]`;
18+
let code = `const o = ${requireArray}; export default o;`;
1919

20-
// add the list of file paths in dev for easier debugging.
21-
if (process.env.NODE_ENV !== 'production') {
22-
const fileNames = `[${routeFiles.map(fileName => JSON.stringify(fileName)).join(',')}]`;
20+
// add the list of file paths in dev for easier debugging.
21+
if (process.env.NODE_ENV !== 'production') {
22+
const fileNames = `[${routeFiles.map(fileName => JSON.stringify(fileName)).join(',')}]`;
2323

24-
code += `o.__debugFileNames = ${fileNames}`;
25-
}
24+
code += `o.__debugFileNames = ${fileNames}`;
25+
}
2626

27-
return { code };
27+
return { code };
28+
});
2829
};

src/internals/babel/global-babel-preset.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,16 @@ module.exports = function buildPreset(api, opts = {}) {
1919
],
2020

2121
plugins: [
22+
require('@babel/plugin-syntax-dynamic-import').default,
2223
[require('@babel/plugin-transform-runtime').default, {
2324
corejs: false,
2425
helpers: true,
2526
regenerator: true,
26-
useESModules: true,
27+
28+
// https://github.com/webpack/webpack/issues/4039#issuecomment-273804003
29+
// we can't have both `import` and `module.exports` in the same file.
30+
// we can't
31+
useESModules: false,
2732
...opts['@babel/plugin-transform-runtime'],
2833
}],
2934
],
@@ -32,8 +37,8 @@ module.exports = function buildPreset(api, opts = {}) {
3237
if (process.env.BABEL_ENV === 'production') {
3338
preset.plugins.push(
3439
require('babel-plugin-lodash'),
35-
require('@babel/plugin-transform-react-constant-elements'),
36-
[require('babel-plugin-transform-react-remove-prop-types'), {
40+
require('@babel/plugin-transform-react-constant-elements').default,
41+
[require('babel-plugin-transform-react-remove-prop-types').default, {
3742
mode: 'remove',
3843
removeImport: true,
3944
...opts['babel-plugin-transform-react-remove-prop-types'],

src/internals/babel/internal-babel-preset.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,16 @@ module.exports = function buildPreset(api, opts = {}) {
1616
'@babel/preset-env': buildEsModules ? {
1717
...passDownOpts['@babel/preset-env'],
1818
targets: 'maintained node versions',
19+
modules: 'commonjs',
1920
} : {},
21+
22+
'@babel/plugin-transform-runtime': {
23+
useESModules: !buildEsModules,
24+
},
2025
});
2126

2227
preset.presets.push(
23-
[require('@babel/preset-react'), {
28+
[require('@babel/preset-react').default, {
2429
development: process.env.BABEL_ENV !== 'production',
2530
useBuiltIns: true,
2631
...opts['@babel/preset-react'],
@@ -29,13 +34,14 @@ module.exports = function buildPreset(api, opts = {}) {
2934

3035
preset.plugins.push(
3136
require('@babel/plugin-transform-flow-strip-types').default,
32-
require('@babel/plugin-syntax-dynamic-import').default,
33-
require('@babel/plugin-proposal-class-properties').default,
3437
[require('@babel/plugin-proposal-decorators').default, {
3538
// TODO: migrate to non-legacy decorators
3639
legacy: true,
3740
// decoratorsBeforeExport: true,
3841
}],
42+
[require('@babel/plugin-proposal-class-properties').default, {
43+
loose: true,
44+
}],
3945
);
4046

4147
if (buildEsModules) {

src/internals/babel/local-babel-preset.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,17 @@ module.exports = function buildPreset(api, opts = {}) {
1313
const preset = buildGlobalPreset(api, opts);
1414

1515
preset.presets.push(
16-
[require('@babel/preset-react'), {
16+
[require('@babel/preset-react').default, {
1717
development: process.env.BABEL_ENV !== 'production',
1818
useBuiltIns: true,
1919
...opts['@babel/preset-react'],
2020
}],
2121
);
2222

2323
preset.plugins.push(
24-
require('@babel/plugin-react-intl-auto'),
25-
require('@babel/plugin-syntax-dynamic-import'),
24+
[require('babel-plugin-react-intl-auto').default, {
25+
...opts['babel-plugin-react-intl-auto'],
26+
}],
2627
// TODO react-loadable-plugin
2728
);
2829

src/internals/webpack/features/babel.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,36 +24,50 @@ export default class BabelFeature extends BaseFeature {
2424
test: BaseFeature.FILE_TYPE_JS,
2525
loader: 'babel-loader',
2626
exclude: /node_modules/,
27-
options: this.getProjectBabelConfig(),
27+
options: {
28+
sourceType: 'module',
29+
...this.getProjectBabelConfig(),
30+
31+
babelrc: false,
32+
33+
// Cache build results in ./node_modules/.cache/reworkjs/babel.
34+
// We use findCacheDir() because of:
35+
// https://github.com/facebookincubator/create-react-app/issues/483
36+
cacheDirectory: `${findCacheDir({
37+
name: frameworkMetadata.name,
38+
})}/babel`,
39+
},
2840
});
2941

3042
// this is ran exclusively on node_modules to transpile valid ES features based on browserslistrc.
3143
webpack.injectRules({
3244
test: BaseFeature.FILE_TYPE_JS,
3345
loader: 'babel-loader',
3446
include: /node_modules/,
47+
48+
// do not transpile @babel/runtime as it will try to inject @babel/runtime inside itself.
49+
exclude: /@babel\/runtime/,
50+
3551
options: {
52+
sourceType: 'unambiguous',
3653
presets: ['@reworkjs/reworkjs/lib/internals/babel/global-babel-preset'],
54+
babelrc: false,
55+
cacheDirectory: `${findCacheDir({
56+
name: frameworkMetadata.name,
57+
})}/babel-on-deps`,
3758
},
3859
});
3960
}
4061

4162
getProjectBabelConfig() {
4263
const config = this.getBabelConfig();
4364

44-
config.babelrc = false;
45-
4665
if (this.isDev()) {
66+
config.plugins = config.plugins || [];
67+
4768
config.plugins.push('react-hot-loader/babel');
4869
}
4970

50-
// Cache build results in ./node_modules/.cache/reworkjs/babel.
51-
// We use findCacheDir() because of:
52-
// https://github.com/facebookincubator/create-react-app/issues/483
53-
config.cacheDirectory = `${findCacheDir({
54-
name: frameworkMetadata.name,
55-
})}/babel`;
56-
5771
return config;
5872
}
5973

0 commit comments

Comments
 (0)