test(v2): babel exclude transpilation logic to prevent regression (#2024)

* refactor(v2): add tests to babel exclude transpilation logic to prevent regression

* stronger test
This commit is contained in:
Endi 2019-11-21 23:15:46 +07:00 committed by Yangshun Tay
parent b360b450d8
commit 205b367000
2 changed files with 73 additions and 12 deletions

View file

@ -0,0 +1,59 @@
/**
* Copyright (c) 2017-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import path from 'path';
import {excludeJS, clientDir} from '../base';
describe('babel transpilation exclude logic', () => {
test('always transpile client dir files', () => {
const clientFiles = [
'App.js',
'clientEntry.js',
'serverEntry.js',
path.join('exports', 'Link.js'),
];
clientFiles.forEach(file => {
expect(excludeJS(path.join(clientDir, file))).toEqual(false);
});
});
test('always transpile non node_module files', () => {
const moduleFiles = [
'/pages/user/App.jsx',
'/website/src/components/foo.js',
'/src/theme/SearchBar/index.js',
];
moduleFiles.forEach(file => {
expect(excludeJS(file)).toEqual(false);
});
});
test('transpile docusaurus npm packages even in node_modules', () => {
const moduleFiles = [
'/website/node_modules/docusaurus-theme-search/theme/Navbar/index.js',
'node_modules/@docusaurus/theme-classic/theme/Layout.js',
'/docusaurus/website/node_modules/@docusaurus/theme-search-algolia/theme/SearchBar.js',
];
moduleFiles.forEach(file => {
expect(excludeJS(file)).toEqual(false);
});
});
test('does not transpile node_modules', () => {
const moduleFiles = [
'node_modules/react-toggle.js',
'/website/node_modules/react-trend/index.js',
'/docusaurus/website/node_modules/react-super.js',
'/docusaurus/website/node_modules/@docusaurus/core/node_modules/core-js/modules/_descriptors.js',
'node_modules/docusaurus-theme-classic/node_modules/react-daypicker/index.js',
];
moduleFiles.forEach(file => {
expect(excludeJS(file)).toEqual(true);
});
});
});

View file

@ -17,6 +17,19 @@ import {getBabelLoader, getCacheLoader, getStyleLoaders} from './utils';
const CSS_REGEX = /\.css$/;
const CSS_MODULE_REGEX = /\.module\.css$/;
export const clientDir = path.join(__dirname, '..', 'client');
export function excludeJS(modulePath: string) {
// always transpile client dir
if (modulePath.startsWith(clientDir)) {
return false;
}
// Don't transpile node_modules except any docusaurus npm package
return (
/node_modules/.test(modulePath) &&
!/(docusaurus)((?!node_modules).)*\.jsx?$/.test(modulePath)
);
}
export function createBaseConfig(
props: Props,
@ -24,7 +37,6 @@ export function createBaseConfig(
): Configuration {
const {outDir, siteDir, baseUrl, generatedFilesDir, routesPaths} = props;
const clientDir = path.join(__dirname, '..', 'client');
const totalPages = routesPaths.length;
const isProd = process.env.NODE_ENV === 'production';
return {
@ -133,17 +145,7 @@ export function createBaseConfig(
rules: [
{
test: /\.jsx?$/,
exclude: modulePath => {
// always transpile client dir
if (modulePath.startsWith(clientDir)) {
return false;
}
// Don't transpile node_modules except any docusaurus npm package
return (
/node_modules/.test(modulePath) &&
!/(docusaurus)((?!node_modules).)*\.jsx?$/.test(modulePath)
);
},
exclude: excludeJS,
use: [getCacheLoader(isServer), getBabelLoader(isServer)].filter(
Boolean,
) as Loader[],