fix(web): generate .swcrc file with modern defaults when creating new webapps (#18749)

This commit is contained in:
Jack Hsu 2023-08-22 07:05:30 -04:00 committed by GitHub
parent 791171e95d
commit 750f485b93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 59 additions and 39 deletions

View File

@ -77,7 +77,7 @@ describe('Web Components Applications', () => {
customElements.define('app-root', AppElement); customElements.define('app-root', AppElement);
` `
); );
runCLI(`build ${appName} --outputHashing none --compiler babel`); runCLI(`build ${appName} --outputHashing none`);
checkFilesExist( checkFilesExist(
`dist/apps/${appName}/index.html`, `dist/apps/${appName}/index.html`,
`dist/apps/${appName}/runtime.js`, `dist/apps/${appName}/runtime.js`,

View File

@ -967,6 +967,17 @@ describe('app', () => {
'swc-loader': expect.any(String), 'swc-loader': expect.any(String),
}); });
}); });
it('should add .swcrc when --compiler=swc', async () => {
await applicationGenerator(appTree, {
...schema,
compiler: 'swc',
});
expect(readJson(appTree, '/apps/my-app/.swcrc')).toEqual({
jsc: { target: 'es2016' },
});
});
}); });
describe('--root-project', () => { describe('--root-project', () => {

View File

@ -79,39 +79,34 @@ export function createApplicationFiles(host: Tree, options: NormalizedSchema) {
: undefined, : undefined,
].filter(Boolean), ].filter(Boolean),
}); });
} else if ( } else if (options.compiler === 'swc') {
options.style === 'styled-components' || const swcrc: any = {
options.style === '@emotion/styled' || jsc: {
options.style === 'styled-jsx' target: 'es2016',
) { },
writeJson( };
host, if (options.style === 'styled-components') {
`${options.appProjectRoot}/.swcrc`, swcrc.jsc.experimental = {
plugins: [
{ [
jsc: { '@swc/plugin-styled-components',
experimental: { {
plugins: [ displayName: true,
options.style === 'styled-components' ssr: true,
? [ },
'@swc/plugin-styled-components', ],
{ ],
displayName: true, };
ssr: true, } else if (options.style === '@emotion/styled') {
}, swcrc.jsc.experimental = {
] plugins: [['@swc/plugin-emotion', {}]],
: undefined, };
options.style === 'styled-jsx' } else if (options.style === 'styled-jsx') {
? ['@swc/plugin-styled-jsx', {}] swcrc.jsc.experimental = {
: undefined, plugins: [['@swc/plugin-styled-jsx', {}]],
options.style === '@emotion/styled' };
? ['@swc/plugin-emotion', {}] }
: undefined, writeJson(host, `${options.appProjectRoot}/.swcrc`, swcrc);
].filter(Boolean),
},
},
}
);
} }
} else if (options.bundler === 'rspack') { } else if (options.bundler === 'rspack') {
generateFiles( generateFiles(

View File

@ -586,6 +586,9 @@ describe('app', () => {
}; };
" "
`); `);
expect(tree.exists('apps/my-app/.babelrc')).toBeTruthy();
expect(tree.exists('apps/my-app/.swcrc')).toBeFalsy();
}); });
it('should support swc compiler', async () => { it('should support swc compiler', async () => {
@ -609,6 +612,9 @@ describe('app', () => {
}; };
" "
`); `);
expect(tree.exists('apps/my-app/.babelrc')).toBeFalsy();
expect(tree.exists('apps/my-app/.swcrc')).toBeTruthy();
}); });
}); });

View File

@ -20,6 +20,7 @@ import {
Tree, Tree,
updateNxJson, updateNxJson,
updateProjectConfiguration, updateProjectConfiguration,
writeJson,
} from '@nx/devkit'; } from '@nx/devkit';
import { swcCoreVersion } from '@nx/js/src/utils/versions'; import { swcCoreVersion } from '@nx/js/src/utils/versions';
import type { Linter } from '@nx/linter'; import type { Linter } from '@nx/linter';
@ -312,12 +313,24 @@ export async function applicationGenerator(host: Tree, schema: Schema) {
} }
if (options.compiler === 'swc') { if (options.compiler === 'swc') {
writeJson(host, joinPathFragments(options.appProjectRoot, '.swcrc'), {
jsc: {
parser: {
syntax: 'typescript',
},
target: 'es2016',
},
});
const installTask = addDependenciesToPackageJson( const installTask = addDependenciesToPackageJson(
host, host,
{}, {},
{ '@swc/core': swcCoreVersion, 'swc-loader': swcLoaderVersion } { '@swc/core': swcCoreVersion, 'swc-loader': swcLoaderVersion }
); );
tasks.push(installTask); tasks.push(installTask);
} else {
writeJson(host, joinPathFragments(options.appProjectRoot, '.babelrc'), {
presets: ['@nx/js/babel'],
});
} }
setDefaults(host, options); setDefaults(host, options);

View File

@ -1,5 +0,0 @@
{
"presets": [
"@nx/js/babel"
]
}