init
This commit is contained in:
6
config/dev.js
Normal file
6
config/dev.js
Normal file
@@ -0,0 +1,6 @@
|
||||
export default {
|
||||
|
||||
mini: {},
|
||||
h5: {}
|
||||
}
|
||||
|
||||
117
config/index.js
Normal file
117
config/index.js
Normal file
@@ -0,0 +1,117 @@
|
||||
import { defineConfig } from '@tarojs/cli'
|
||||
import path from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
import devConfig from './dev'
|
||||
import prodConfig from './prod'
|
||||
import NutUIResolver from '@nutui/auto-import-resolver'
|
||||
|
||||
import Components from 'unplugin-vue-components/vite'
|
||||
|
||||
// 获取当前文件的目录路径
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = path.dirname(__filename)
|
||||
|
||||
// https://taro-docs.jd.com/docs/next/config#defineconfig-辅助函数
|
||||
export default defineConfig(async (merge, { command, mode }) => {
|
||||
const baseConfig = {
|
||||
projectName: 'comList',
|
||||
date: '2025-12-1',
|
||||
designWidth(input) {
|
||||
// 配置 NutUI 375 尺寸
|
||||
if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) {
|
||||
return 375
|
||||
}
|
||||
// 全局使用 Taro 默认的 750 尺寸
|
||||
return 750
|
||||
},
|
||||
deviceRatio: {
|
||||
640: 2.34 / 2,
|
||||
750: 1,
|
||||
375: 2,
|
||||
828: 1.81 / 2
|
||||
},
|
||||
sourceRoot: 'src',
|
||||
outputRoot: 'dist',
|
||||
plugins: [
|
||||
'@tarojs/plugin-html',
|
||||
path.resolve(__dirname, './plugins/fix-tabbar-list.js')
|
||||
],
|
||||
defineConstants: {
|
||||
},
|
||||
copy: {
|
||||
patterns: [
|
||||
],
|
||||
options: {
|
||||
}
|
||||
},
|
||||
framework: 'vue3',
|
||||
compiler: {
|
||||
type: 'vite',
|
||||
vitePlugins: [
|
||||
Components({
|
||||
resolvers: [NutUIResolver({ taro: true })]
|
||||
})
|
||||
]
|
||||
},
|
||||
mini: {
|
||||
postcss: {
|
||||
pxtransform: {
|
||||
enable: true,
|
||||
config: {
|
||||
|
||||
}
|
||||
},
|
||||
cssModules: {
|
||||
enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
|
||||
config: {
|
||||
namingPattern: 'module', // 转换模式,取值为 global/module
|
||||
generateScopedName: '[name]__[local]___[hash:base64:5]'
|
||||
}
|
||||
}
|
||||
},
|
||||
optimizeMainPackage: {
|
||||
enable: false
|
||||
},
|
||||
commonChunks: ['runtime', 'vendors', 'taro', 'common']
|
||||
},
|
||||
h5: {
|
||||
publicPath: '/',
|
||||
staticDirectory: 'static',
|
||||
|
||||
miniCssExtractPluginOption: {
|
||||
ignoreOrder: true,
|
||||
filename: 'css/[name].[hash].css',
|
||||
chunkFilename: 'css/[name].[chunkhash].css'
|
||||
},
|
||||
postcss: {
|
||||
autoprefixer: {
|
||||
enable: true,
|
||||
config: {}
|
||||
},
|
||||
cssModules: {
|
||||
enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
|
||||
config: {
|
||||
namingPattern: 'module', // 转换模式,取值为 global/module
|
||||
generateScopedName: '[name]__[local]___[hash:base64:5]'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
rn: {
|
||||
appName: 'taroDemo',
|
||||
postcss: {
|
||||
cssModules: {
|
||||
enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// 本地开发构建配置(不混淆压缩)
|
||||
return merge({}, baseConfig, devConfig)
|
||||
}
|
||||
// 生产构建配置(默认开启压缩混淆等)
|
||||
return merge({}, baseConfig, prodConfig)
|
||||
})
|
||||
|
||||
79
config/plugins/fix-tabbar-list.js
Normal file
79
config/plugins/fix-tabbar-list.js
Normal file
@@ -0,0 +1,79 @@
|
||||
/**
|
||||
* Taro 插件:修复 tabBar.list
|
||||
* 确保即使使用自定义 tabBar,也保留 list 配置
|
||||
*/
|
||||
module.exports = (ctx) => {
|
||||
return {
|
||||
name: 'fix-tabbar-list',
|
||||
// 修改 app 配置
|
||||
modifyAppConfig(config) {
|
||||
// 确保 tabBar.list 存在
|
||||
if (config.tabBar && !config.tabBar.list) {
|
||||
config.tabBar.list = [
|
||||
{
|
||||
pagePath: 'pages/home/index',
|
||||
text: '首页',
|
||||
iconPath: 'assets/tabbar/home.png',
|
||||
selectedIconPath: 'assets/tabbar/home-active.png'
|
||||
},
|
||||
{
|
||||
pagePath: 'pages/check/index',
|
||||
text: '质检',
|
||||
iconPath: 'assets/tabbar/check.png',
|
||||
selectedIconPath: 'assets/tabbar/check-active.png'
|
||||
},
|
||||
{
|
||||
pagePath: 'pages/personnel/index',
|
||||
text: '人员',
|
||||
iconPath: 'assets/tabbar/personnel.png',
|
||||
selectedIconPath: 'assets/tabbar/personnel-active.png'
|
||||
}
|
||||
]
|
||||
}
|
||||
return config
|
||||
},
|
||||
// 编译完成后再次检查(双重保险)
|
||||
onBuildFinish() {
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const appJsonPath = path.join(ctx.paths.outputPath, 'app.json')
|
||||
|
||||
if (fs.existsSync(appJsonPath)) {
|
||||
try {
|
||||
const appJson = JSON.parse(fs.readFileSync(appJsonPath, 'utf8'))
|
||||
|
||||
// 如果 tabBar 存在但没有 list,添加 list
|
||||
if (appJson.tabBar && !appJson.tabBar.list) {
|
||||
appJson.tabBar.list = [
|
||||
{
|
||||
pagePath: 'pages/home/index',
|
||||
text: '首页',
|
||||
iconPath: 'assets/tabbar/home.png',
|
||||
selectedIconPath: 'assets/tabbar/home-active.png'
|
||||
},
|
||||
{
|
||||
pagePath: 'pages/check/index',
|
||||
text: '质检',
|
||||
iconPath: 'assets/tabbar/check.png',
|
||||
selectedIconPath: 'assets/tabbar/check-active.png'
|
||||
},
|
||||
{
|
||||
pagePath: 'pages/personnel/index',
|
||||
text: '人员',
|
||||
iconPath: 'assets/tabbar/personnel.png',
|
||||
selectedIconPath: 'assets/tabbar/personnel-active.png'
|
||||
}
|
||||
]
|
||||
|
||||
fs.writeFileSync(appJsonPath, JSON.stringify(appJson, null, 2), 'utf8')
|
||||
console.log('✅ [fix-tabbar-list] 已修复 dist/app.json 中的 tabBar.list')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('❌ [fix-tabbar-list] 修复失败:', error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
32
config/prod.js
Normal file
32
config/prod.js
Normal file
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
mini: {},
|
||||
h5: {
|
||||
/**
|
||||
* WebpackChain 插件配置
|
||||
* @docs https://github.com/neutrinojs/webpack-chain
|
||||
*/
|
||||
// webpackChain (chain) {
|
||||
// /**
|
||||
// * 如果 h5 端编译后体积过大,可以使用 webpack-bundle-analyzer 插件对打包体积进行分析。
|
||||
// * @docs https://github.com/webpack-contrib/webpack-bundle-analyzer
|
||||
// */
|
||||
// chain.plugin('analyzer')
|
||||
// .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])
|
||||
// /**
|
||||
// * 如果 h5 端首屏加载时间过长,可以使用 prerender-spa-plugin 插件预加载首页。
|
||||
// * @docs https://github.com/chrisvfritz/prerender-spa-plugin
|
||||
// */
|
||||
// const path = require('path')
|
||||
// const Prerender = require('prerender-spa-plugin')
|
||||
// const staticDir = path.join(__dirname, '..', 'dist')
|
||||
// chain
|
||||
// .plugin('prerender')
|
||||
// .use(new Prerender({
|
||||
// staticDir,
|
||||
// routes: [ '/pages/index/index' ],
|
||||
// postProcess: (context) => ({ ...context, outputPath: path.join(staticDir, 'index.html') })
|
||||
// }))
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user