create-base-files.js 7.0 KB

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