create-base-files.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. // 生成 src/manifest.json 和 src/pages.json
  2. import fs from 'node:fs'
  3. import path from 'node:path'
  4. import { fileURLToPath } from 'node:url'
  5. // 获取当前文件的目录路径(替代 CommonJS 中的 __dirname)
  6. const __filename = fileURLToPath(import.meta.url)
  7. const __dirname = path.dirname(__filename)
  8. const manifest = {
  9. 'name': 'unibest',
  10. 'appid': '__UNI__D1E5001',
  11. 'description': '',
  12. 'versionName': '1.0.0',
  13. 'versionCode': '100',
  14. 'transformPx': false,
  15. 'app-plus': {
  16. usingComponents: true,
  17. nvueStyleCompiler: 'uni-app',
  18. compilerVersion: 3,
  19. splashscreen: {
  20. alwaysShowBeforeRender: true,
  21. waiting: true,
  22. autoclose: true,
  23. delay: 0,
  24. },
  25. modules: {},
  26. distribute: {
  27. android: {
  28. permissions: [
  29. '<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>',
  30. '<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>',
  31. '<uses-permission android:name="android.permission.VIBRATE"/>',
  32. '<uses-permission android:name="android.permission.READ_LOGS"/>',
  33. '<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>',
  34. '<uses-feature android:name="android.hardware.camera.autofocus"/>',
  35. '<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>',
  36. '<uses-permission android:name="android.permission.CAMERA"/>',
  37. '<uses-permission android:name="android.permission.GET_ACCOUNTS"/>',
  38. '<uses-permission android:name="android.permission.READ_PHONE_STATE"/>',
  39. '<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>',
  40. '<uses-permission android:name="android.permission.WAKE_LOCK"/>',
  41. '<uses-permission android:name="android.permission.FLASHLIGHT"/>',
  42. '<uses-feature android:name="android.hardware.camera"/>',
  43. '<uses-permission android:name="android.permission.WRITE_SETTINGS"/>',
  44. ],
  45. minSdkVersion: 21,
  46. targetSdkVersion: 30,
  47. abiFilters: [
  48. 'armeabi-v7a',
  49. 'arm64-v8a',
  50. ],
  51. },
  52. ios: {},
  53. sdkConfigs: {},
  54. icons: {
  55. android: {
  56. hdpi: 'static/app/icons/72x72.png',
  57. xhdpi: 'static/app/icons/96x96.png',
  58. xxhdpi: 'static/app/icons/144x144.png',
  59. xxxhdpi: 'static/app/icons/192x192.png',
  60. },
  61. ios: {
  62. appstore: 'static/app/icons/1024x1024.png',
  63. ipad: {
  64. 'app': 'static/app/icons/76x76.png',
  65. 'app@2x': 'static/app/icons/152x152.png',
  66. 'notification': 'static/app/icons/20x20.png',
  67. 'notification@2x': 'static/app/icons/40x40.png',
  68. 'proapp@2x': 'static/app/icons/167x167.png',
  69. 'settings': 'static/app/icons/29x29.png',
  70. 'settings@2x': 'static/app/icons/58x58.png',
  71. 'spotlight': 'static/app/icons/40x40.png',
  72. 'spotlight@2x': 'static/app/icons/80x80.png',
  73. },
  74. iphone: {
  75. 'app@2x': 'static/app/icons/120x120.png',
  76. 'app@3x': 'static/app/icons/180x180.png',
  77. 'notification@2x': 'static/app/icons/40x40.png',
  78. 'notification@3x': 'static/app/icons/60x60.png',
  79. 'settings@2x': 'static/app/icons/58x58.png',
  80. 'settings@3x': 'static/app/icons/87x87.png',
  81. 'spotlight@2x': 'static/app/icons/80x80.png',
  82. 'spotlight@3x': 'static/app/icons/120x120.png',
  83. },
  84. },
  85. },
  86. },
  87. compatible: {
  88. ignoreVersion: true,
  89. },
  90. },
  91. 'quickapp': {},
  92. 'mp-weixin': {
  93. appid: 'wxa2abb91f64032a2b',
  94. setting: {
  95. urlCheck: false,
  96. es6: true,
  97. minified: true,
  98. },
  99. usingComponents: true,
  100. optimization: {
  101. subPackages: true,
  102. },
  103. },
  104. 'mp-alipay': {
  105. usingComponents: true,
  106. styleIsolation: 'shared',
  107. optimization: {
  108. subPackages: true,
  109. },
  110. },
  111. 'mp-baidu': {
  112. usingComponents: true,
  113. },
  114. 'mp-toutiao': {
  115. usingComponents: true,
  116. },
  117. 'uniStatistics': {
  118. enable: false,
  119. },
  120. 'vueVersion': '3',
  121. 'h5': {
  122. router: {
  123. base: '/',
  124. },
  125. },
  126. }
  127. const pages = {
  128. globalStyle: {
  129. navigationStyle: 'default',
  130. navigationBarTitleText: 'unibest',
  131. navigationBarBackgroundColor: '#f8f8f8',
  132. navigationBarTextStyle: 'black',
  133. backgroundColor: '#FFFFFF',
  134. },
  135. easycom: {
  136. autoscan: true,
  137. custom: {
  138. '^fg-(.*)': '@/components/fg-$1/fg-$1.vue',
  139. '^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)': 'z-paging/components/z-paging$1/z-paging$1.vue',
  140. },
  141. },
  142. tabBar: {
  143. custom: true,
  144. color: '#999999',
  145. selectedColor: '#018d71',
  146. backgroundColor: '#F8F8F8',
  147. borderStyle: 'black',
  148. height: '50px',
  149. fontSize: '10px',
  150. iconWidth: '24px',
  151. spacing: '3px',
  152. list: [
  153. {
  154. text: '首页',
  155. pagePath: 'pages/index/index',
  156. },
  157. {
  158. text: '关于',
  159. pagePath: 'pages/about/about',
  160. },
  161. {
  162. text: '我的',
  163. pagePath: 'pages/me/me',
  164. },
  165. ],
  166. },
  167. pages: [
  168. {
  169. path: 'pages/index/index',
  170. type: 'home',
  171. style: {
  172. navigationStyle: 'custom',
  173. navigationBarTitleText: '首页',
  174. },
  175. },
  176. {
  177. path: 'pages/about/about',
  178. type: 'page',
  179. style: {
  180. navigationBarTitleText: '关于',
  181. },
  182. excludeLoginPath: false,
  183. },
  184. {
  185. path: 'pages/about/alova',
  186. type: 'page',
  187. style: {
  188. navigationBarTitleText: 'Alova 演示',
  189. },
  190. },
  191. {
  192. path: 'pages/login/login',
  193. type: 'page',
  194. style: {
  195. navigationBarTitleText: '登录',
  196. },
  197. },
  198. {
  199. path: 'pages/login/register',
  200. type: 'page',
  201. style: {
  202. navigationBarTitleText: '注册',
  203. },
  204. },
  205. {
  206. path: 'pages/me/me',
  207. type: 'page',
  208. style: {
  209. navigationBarTitleText: '我的',
  210. },
  211. },
  212. ],
  213. subPackages: [
  214. {
  215. root: 'pages-sub',
  216. pages: [
  217. {
  218. path: 'demo/index',
  219. type: 'page',
  220. style: {
  221. navigationBarTitleText: '分包页面',
  222. },
  223. },
  224. ],
  225. },
  226. ],
  227. }
  228. // 使用修复后的 __dirname 来解析文件路径
  229. const manifestPath = path.resolve(__dirname, '../src/manifest.json')
  230. const pagesPath = path.resolve(__dirname, '../src/pages.json')
  231. // 确保 src 目录存在
  232. const srcDir = path.resolve(__dirname, '../src')
  233. if (!fs.existsSync(srcDir)) {
  234. fs.mkdirSync(srcDir, { recursive: true })
  235. }
  236. // 写入文件
  237. fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2))
  238. fs.writeFileSync(pagesPath, JSON.stringify(pages, null, 2))