index.ts 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import path from 'node:path'
  2. import { mkdirSync, writeFileSync } from 'node:fs'
  3. import { defineConfig } from '@tarojs/cli'
  4. import { outputDirectory, readPublicConfig, resolveEnvironment } from './environments'
  5. import packageJson from '../package.json'
  6. import project from '../project.config.json'
  7. export default defineConfig<'vite'>(() => {
  8. const environment = resolveEnvironment(process.env.APP_ENV)
  9. const platform = process.env.TARO_ENV ?? 'weapp'
  10. // Taro loads .env files for the explicit --mode before evaluating this config.
  11. const publicConfig = readPublicConfig(process.env)
  12. // Taro's asset loader receives normalized module IDs on Windows. Use a
  13. // relative output name so non-inline media never retain an absolute path.
  14. const assetOptions = {
  15. limit: 0,
  16. name: (moduleId: string) => path.relative(path.resolve(__dirname, '../src'), moduleId).split(path.sep).join('/'),
  17. }
  18. const metadataDirectory = path.resolve(__dirname, '../.cache/build', platform, environment.name)
  19. const metadata = {
  20. environment: environment.name, label: publicConfig.label, platform,
  21. version: packageJson.version, dataSource: environment.dataSource, builtAt: new Date().toISOString(),
  22. }
  23. mkdirSync(metadataDirectory, { recursive: true })
  24. writeFileSync(path.join(metadataDirectory, 'build-info.json'), `${JSON.stringify(metadata, null, 2)}\n`)
  25. if (platform === 'weapp') {
  26. const weappProject = {
  27. ...project, miniprogramRoot: './', appid: process.env.TARO_APP_ID || project.appid,
  28. projectname: `math.miniapp-${environment.name}`,
  29. }
  30. writeFileSync(path.join(metadataDirectory, 'project.config.json'), `${JSON.stringify(weappProject, null, 2)}\n`)
  31. }
  32. return {
  33. projectName: `math.miniapp-${environment.name}`,
  34. date: '2026-10-26',
  35. designWidth: 750,
  36. deviceRatio: { 375: 2, 640: 1.17, 750: 1, 828: 0.905 },
  37. sourceRoot: 'src',
  38. outputRoot: outputDirectory(platform),
  39. framework: 'react',
  40. compiler: 'vite',
  41. alias: { '@': path.resolve(__dirname, '../src') },
  42. defineConstants: {
  43. __APP_ENV__: JSON.stringify(environment.name),
  44. __APP_ENV_LABEL__: JSON.stringify(publicConfig.label),
  45. __APP_VERSION__: JSON.stringify(packageJson.version),
  46. },
  47. copy: {
  48. patterns: [
  49. { from: `.cache/build/${platform}/${environment.name}/build-info.json`, to: `${outputDirectory(platform)}/build-info.json` },
  50. ...(platform === 'weapp' ? [{ from: `.cache/build/${platform}/${environment.name}/project.config.json`, to: `${outputDirectory(platform)}/project.config.json` }] : []),
  51. ],
  52. options: {},
  53. },
  54. mini: {
  55. imageUrlLoaderOption: assetOptions,
  56. mediaUrlLoaderOption: assetOptions,
  57. postcss: { pxtransform: { enable: true }, cssModules: { enable: false } },
  58. },
  59. h5: {
  60. imageUrlLoaderOption: assetOptions,
  61. mediaUrlLoaderOption: assetOptions,
  62. publicPath: '/',
  63. staticDirectory: 'static',
  64. router: { mode: 'hash' },
  65. devServer: { host: '127.0.0.1', port: 10086 },
  66. postcss: { pxtransform: { enable: true, config: { maxRootSize: 25.6 } }, autoprefixer: { enable: true }, cssModules: { enable: false } },
  67. },
  68. }
  69. })