react.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright 2019-2021 Tauri Programme within The Commons Conservancy
  2. // SPDX-License-Identifier: Apache-2.0
  3. // SPDX-License-Identifier: MIT
  4. import { join } from 'path'
  5. // @ts-expect-error
  6. import scaffe from 'scaffe'
  7. import { shell } from '../shell'
  8. import { Recipe } from '../types/recipe'
  9. const afterCra = async (
  10. cwd: string,
  11. appName: string,
  12. typescript: boolean = false
  13. ): Promise<void> => {
  14. const templateDir = join(
  15. __dirname,
  16. `../src/templates/react/${typescript ? 'react-ts' : 'react'}`
  17. )
  18. try {
  19. // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
  20. await scaffe.generate(templateDir, join(cwd, appName), {
  21. overwrite: true
  22. })
  23. } catch (err) {
  24. console.log(err)
  25. }
  26. }
  27. const reactjs: Recipe = {
  28. descriptiveName: 'React.js',
  29. shortName: 'reactjs',
  30. configUpdate: ({ cfg, packageManager }) => ({
  31. ...cfg,
  32. distDir: `../build`,
  33. devPath: 'http://localhost:3000',
  34. beforeDevCommand: `${packageManager === 'yarn' ? 'yarn' : 'npm run'} start`,
  35. beforeBuildCommand: `${
  36. packageManager === 'yarn' ? 'yarn' : 'npm run'
  37. } build`
  38. }),
  39. extraNpmDevDependencies: [],
  40. extraNpmDependencies: [],
  41. preInit: async ({ cwd, cfg, packageManager }) => {
  42. // CRA creates the folder for you
  43. if (packageManager === 'yarn') {
  44. await shell('yarn', ['create', 'react-app', `${cfg.appName}`], {
  45. cwd
  46. })
  47. } else {
  48. await shell('npx', ['create-react-app', `${cfg.appName}`, '--use-npm'], {
  49. cwd
  50. })
  51. }
  52. await afterCra(cwd, cfg.appName)
  53. },
  54. postInit: async ({ packageManager }) => {
  55. console.log(`
  56. Your installation completed.
  57. To start, run ${packageManager === 'yarn' ? 'yarn' : 'npm run'} tauri dev
  58. `)
  59. return await Promise.resolve()
  60. }
  61. }
  62. const reactts: Recipe = {
  63. ...reactjs,
  64. descriptiveName: 'React with Typescript',
  65. shortName: 'reactts',
  66. extraNpmDependencies: [],
  67. preInit: async ({ cwd, cfg, packageManager }) => {
  68. // CRA creates the folder for you
  69. if (packageManager === 'yarn') {
  70. await shell(
  71. 'yarn',
  72. ['create', 'react-app', '--template', 'typescript', `${cfg.appName}`],
  73. {
  74. cwd
  75. }
  76. )
  77. } else {
  78. await shell(
  79. 'npx',
  80. [
  81. 'create-react-app',
  82. `${cfg.appName}`,
  83. '--use-npm',
  84. '--template',
  85. 'typescript'
  86. ],
  87. {
  88. cwd
  89. }
  90. )
  91. }
  92. await afterCra(cwd, cfg.appName, true)
  93. },
  94. postInit: async ({ packageManager }) => {
  95. console.log(`
  96. Your installation completed.
  97. To start, run ${packageManager === 'yarn' ? 'yarn' : 'npm run'} tauri dev
  98. `)
  99. return await Promise.resolve()
  100. }
  101. }
  102. export { reactjs, reactts }