Skip to content

Commit

Permalink
migrate to create-vite from create-app for React app creating
Browse files Browse the repository at this point in the history
  • Loading branch information
GoodDayForSurf committed Mar 5, 2025
1 parent 671084d commit 009bda6
Show file tree
Hide file tree
Showing 43 changed files with 14 additions and 683 deletions.
32 changes: 10 additions & 22 deletions packages/devextreme-cli/src/applications/application.react.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,17 @@ const defaultStyles = [
];

const getExtension = (appPath) => {
return fs.existsSync(path.join(appPath, 'src', 'App.tsx')) ? '.tsx' : '.js';
return fs.existsSync(path.join(appPath, 'src', 'App.tsx')) ? '.tsx' : '.jsx';
};

const pathToPagesIndex = () => {
const extension = getExtension(process.cwd());
return path.join(process.cwd(), 'src', 'pages', `index${extension}`);
};

const preparePackageJsonForTemplate = (appPath, appName, isTypeScript) => {
const preparePackageJsonForTemplate = (appPath, appName) => {
const dependencies = [
{ name: 'sass', version: '^1.34.1' },
{ name: 'sass-embedded', version: '^1.85.1' },
{ name: 'devextreme-cli', version: latestVersions['devextreme-cli'], dev: true },
{ name: 'react-router-dom', version: '^6.3.0' },
];
Expand Down Expand Up @@ -61,26 +61,24 @@ const create = async(appName, options) => {
isTypeScript: typescriptUtils.isTypeScript(templateType)
});
const toolingVersion = extractToolingVersion(options);
const commandArguments = [`-p=create-react-app${toolingVersion}`, 'create-react-app', appName];
const commandArguments = [`-p=create-vite${toolingVersion}`, 'create-vite', appName];

const templateSuffix = templateOptions.isTypeScript ? '-typescript' : '';
const templatePath = path.resolve(__dirname, `../templates/cra-template${templateSuffix}`);

commandArguments.push(`--template file:${templatePath}`);
commandArguments.push(`--template react${templateOptions.isTypeScript ? '-ts' : ''}`);

await runCommand('npx', commandArguments);

const appPath = path.join(process.cwd(), appName);

modifyIndexHtml(appPath, templateOptions.project);

addTemplate(appPath, appName, templateOptions);
};

const modifyIndexHtml = (appPath, appName) => {
const indexHtmlPath = path.join(appPath, 'public', 'index.html');
const indexHtmlPath = path.join(appPath, 'index.html');

let htmlContent = fs.readFileSync(indexHtmlPath).toString();
htmlContent = htmlContent.replace(/<title>(\w+\s*)+<\/title>/, `<title>${appName}<\/title>`);
htmlContent = htmlContent.replace(/<title>[^<]+<\/title>/, `<title>${appName}<\/title>`);
htmlContent = htmlContent.replace('<body>', '<body class="dx-viewport">');

fs.writeFileSync(indexHtmlPath, htmlContent);
Expand All @@ -97,7 +95,6 @@ const addTemplate = (appPath, appName, templateOptions) => {
);

const manifestPath = path.join(appPath, 'public', 'manifest.json');
const indexPath = path.join(appPath, 'src', templateOptions.isTypeScript ? 'index.tsx' : 'index.js');

const styles = [
'./themes/generated/theme.additional.css',
Expand All @@ -108,15 +105,15 @@ const addTemplate = (appPath, appName, templateOptions) => {
];

templateCreator.moveTemplateFilesToProject(applicationTemplatePath, appPath, templateOptions, getCorrectPath);
removeFile(path.join(appPath, 'src', 'App.css'));

!templateOptions.isTypeScript && removeFile(path.join(appPath, 'src', 'types.js'));

if(!templateOptions.empty) {
addSamplePages(appPath, templateOptions);
}

preparePackageJsonForTemplate(appPath, appName, templateOptions.isTypeScript);
updateJsonPropName(manifestPath, appName);
addPolyfills(packageJsonUtils.getPackageJsonPath(), indexPath);
install({}, appPath, styles);
};

Expand All @@ -130,15 +127,6 @@ const install = (options, appPath, styles) => {
packageManager.runInstall({ cwd: appPath });
};

const addPolyfills = (packagePath, indexPath) => {
const packages = [
{ name: 'react-app-polyfill', version: '^1.0.0' }
];

packageJsonUtils.addDependencies(packagePath, packages);
moduleUtils.insertImport(indexPath, './polyfills');
};

const addStylesToApp = (filePath, styles) => {
styles.forEach(style => {
moduleUtils.insertImport(filePath, style);
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Loading

0 comments on commit 009bda6

Please sign in to comment.