如果你正在使用uni-app开发跨平台应用,很可能一开始是通过HBuilderX的可视化界面创建项目的。HBuilderX确实很方便,点点鼠标就能完成项目搭建和打包。但随着项目规模扩大,特别是需要团队协作时,这种方式的局限性就显现出来了。
我去年接手的一个项目就遇到了这种情况。当时项目已经迭代了十几个版本,每次发布都需要手动在HBuilderX里点击打包按钮,然后等待编译完成。更麻烦的是,不同开发者的本地环境配置不一致,导致打包结果经常出现差异。最严重的一次,测试环境正常的功能在生产环境居然报错了,排查了半天才发现是因为打包时用的Node.js版本不同。
这时候就需要引入基于Node.js和vue-cli的工程化方案。这种方案有几个明显优势:
根据我的经验,Node.js版本是最容易踩坑的地方。uni-app对Node版本有一定要求,特别是涉及到node-sass等原生模块时。经过多次测试,我推荐使用以下版本组合:
你可以使用nvm来管理多个Node版本:
bash复制nvm install 14.18.1
nvm use 14.18.1
首先全局安装vue-cli:
bash复制npm install -g @vue/cli
然后创建新项目:
bash复制vue create -p dcloudio/uni-preset-vue my-project
如果遇到网络问题无法创建,可以手动下载uni-preset-vue模板:
bash复制vue create -p /path/to/uni-preset-vue my-project
创建好新项目后,需要将原有HBuilderX项目迁移过来:
javascript复制import './uni.promisify.adaptor'
bash复制npm install node-sass@4.14.1 sass-loader@7.1.0
uni-app通过vue-cli-service提供多平台打包支持。在package.json中可以看到各种平台的构建命令:
json复制"scripts": {
"build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
"build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build"
}
要打包微信小程序,只需运行:
bash复制npm run build:mp-weixin
如果需要修改webpack配置,可以在项目根目录创建vue.config.js:
javascript复制module.exports = {
configureWebpack: {
// 自定义配置
},
chainWebpack(config) {
// 修改loader配置
}
}
我曾经遇到过需要修改图片打包规则的需求,通过chainWebpack可以这样实现:
javascript复制config.module
.rule('images')
.test(/\.(png|jpe?g|gif|svg)$/)
.use('url-loader')
.loader('url-loader')
.tap(options => {
options.limit = 8192 // 小于8k的图片转为base64
return options
})
在项目根目录创建build.sh:
bash复制#!/bin/bash
# 安装依赖
npm install
# 构建H5版本
npm run build:h5
# 构建微信小程序版本
npm run build:mp-weixin
# 将构建产物打包
tar -czf dist.tar.gz dist/*
在云效Codeup中创建新的流水线,主要步骤包括:
bash build.sh在实际配置中,我遇到过几个典型问题:
chmod +x build.shbash复制rm -rf node_modules
rm -f package-lock.json
可以通过环境变量区分不同环境:
javascript复制// vue.config.js
const env = process.env.NODE_ENV
module.exports = {
configureWebpack: {
plugins: [
new webpack.DefinePlugin({
'process.env.API_BASE': JSON.stringify(
env === 'production'
? 'https://api.example.com'
: 'https://dev.api.example.com'
)
})
]
}
}
对于大型项目,构建速度可能很慢。可以考虑以下优化:
javascript复制config.module
.rule('js')
.use('thread-loader')
.loader('thread-loader')
javascript复制config.cache({
type: 'filesystem',
buildDependencies: {
config: [__filename]
}
})
可以在流水线中加入自动化测试:
bash复制npm run test:unit
npm run test:e2e
建议在package.json中配置测试脚本:
json复制"scripts": {
"test:unit": "vue-cli-service test:unit",
"test:e2e": "vue-cli-service test:e2e"
}
在最近的一个电商项目中,我们完整实施了这套自动化部署方案。从HBuilderX迁移到vue-cli工程花了大约2天时间,但带来的收益非常明显:
最大的挑战是处理各种平台特有的配置差异。比如微信小程序和H5的样式处理就有所不同,需要针对不同平台调整webpack配置。我的建议是:
这套方案已经在多个项目中验证过,确实能显著提升开发效率和部署可靠性。如果你还在手动打包,强烈建议尝试自动化部署方案。