【踩坑记录】uni-app工程转vue-cli 工程

本文分享了将旧版uniapp项目从hbuilder编辑器迁移到npm打包的过程及遇到的问题解决办法,包括调整sass-loader配置、处理不同样式加载器冲突等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接手了一个uniapp项目,旧代码只能hbuilder编辑器打包,无法上公司的流水线,抽空研究了一下怎么转成npm打包。
网上的教程看起来特别简单,无非就是找个壳子把旧代码包起来。但是转换的过程中,踩坑不断。

思路一

按官网上教的用vue-cli 4.x去创建了一个的默认模板,旧代码扔进src文件夹,npm run serve。
报错一堆,连html-webpack-plugin都报错说找不到……检查了node_modules,生成的模板是webpack 5.74。菜鸡懵逼,uniapp官网不是说vue脚手架4创建出来的应该是webpack4吗…
但是不管我怎么尝试uniapp的npm指令,创建出的默认模板都是webpack5……
突然想到github上应该有类似的项目,我可以把人家的壳子扒下来。

思路二

顺利找到一个开源uniapp项目,这个项目是webpack4,地址:
https://github.com/stavyan/TinyShop-UniApp
src替换成我的旧代码,走起~
下面记录一下,遇上的各种报错信息

报错1:node-sass安装不上

TinyShop的sass-loader版本是7.1.0,并且同时装了sass和node-sass。
sass-loader不一定非要装node-sass,sass-loader官网上看,低版本sass-loader一直推荐装node-sass,但是高版本开始就说node-sass和sass可以二选一。
于是我删掉了package.json的node-sass,重新npm i。

报错2:less-loader未安装

迷惑,为啥有了sass,还要装less,全局搜代码,发现其中有两个文件写的是:

<style lang="less" scoped>

干掉,改成

<style lang="scss" scoped>
报错3:/deep/编译没通过

因为这个版本的sass不支持/deep/,全局替换成::v-deep

报错4: end value has mixed support, consider using flex-end instead

flex布局不支持start和end,要改成flex-end和flex-start。开发过pc端的同学应该也遇到过,start和end甚至低版本的谷歌浏览器都不支持。

至此,打包和运行都没啥问题了,如果部署后不是根目录,vue.config.js还需要加上:

publicPath: './'

之前写在manifest里的proxy代理,依旧有效,不用在vue.config.js再写一遍。

--------分割线----------

发生了变态的特殊情况,本地运行和打包都没问题,公司流水线上编译失败……
报错信息:

Invalid options object. Sass Loader has been initialized using an options object that does not match the API schema。
 - options has an unknown property 'data'. These properties are valid:
   object { implementation?, sassOptions?, prependData?, sourceMap?, webpackImporter? }

全网都告诉我,sass-loader版本过高,要降到7.1.0,可我已经是7.1.0了啊啊啊啊啊啊。
难道还要降到6不成?
自暴自弃降到了6,结果报错更多了(跪下
prependData是8的写法,破罐破摔sass-loader改成8,竟然编译通过了……迷惑脸……
我怀疑公司的流水线依赖包源是不是有问题……

<think>嗯,用户想了解如何使用vue-cli创建支持Vue3的uni-app项目。首先,我得确认一下当前uni-appVue3的支持情况。记得之前uni-app官方是在HBuilderX中支持Vue3的,但用户可能更习惯使用vue-cli。需要检查官方文档是否有相关说明。 首先,应该确认uni-appVue3支持需要哪个版本。根据之前的了解,uni-app从v3.0.0-alpha开始支持Vue3,但可能需要特定的模板。用户可能已经安装了vue-cli,所以需要指导他们安装正确的模板。 接下来,创建项目的命令。官方可能有特定的模板名称,比如@dcloudio/vue-cli-plugin-uni,或者需要指定版本。可能需要使用vue create -p来指定模板,例如vue create -p dcloudio/uni-preset-vue#vue3 my-project。这里要确保分支或版本号正确,否则可能安装的是Vue2的模板。 然后,项目创建后的配置。可能需要检查package.json中的依赖,确保@dcloudio/uni-cli-shared和相关的Vue3依赖是否正确安装。如果有问题,可能需要手动安装vue@next和@vue/compiler-sfc等。 运行和编译方面,uni-app的命令应该还是相同的,比如npm run dev:%PLATFORM%,但需要确认Vue3下的平台支持是否有变化,比如H5和小程序是否都兼容。可能需要提醒用户注意某些插件或组件是否支持Vue3,避免兼容性问题。 此外,用户可能想知道项目结构的变化,比如main.js中的createApp用法是否与标准Vue3一致。需要指出uni-app可能对创建实例有封装,比如使用createSSRApp或createUniApp,这需要参考官方文档确认。 最后,常见问题处理,比如旧项目迁移到Vue3的注意事项,或者依赖冲突的解决方法。可能需要建议用户检查插件兼容性,逐步迁移,或者寻求社区支持。 总结步骤应该是:环境准备,创建项目,安装依赖,运行调试,注意事项。需要确保每个步骤的命令准确,特别是模板的指定和依赖版本的正确性。同时,提醒用户注意Vue3和Vue2的语法差异,以及uni-app特有的一些限制。</think>以下是通过vue-cli创建支持Vue3的uni-app项目的分步指南: 一、环境准备 1. 确保已安装: - Node.js(建议v14.18+) - Vue CLI 4.x+:`npm install -g @vue/cli` - HBuilderX(可选,用于真机调试) 二、创建项目 ```bash # 使用Vue3模板创建项目 vue create -p dcloudio/uni-preset-vue#vue3 my-project # 根据提示选择: # 1. 选择默认模板(Default (Vue3)) # 2. 等待依赖安装完成 ``` 三、项目结构说明 ``` ├── src │ ├── App.vue # 应用入口组件 │ ├── main.js # Vue3入口文件 │ ├── manifest.json # 应用配置 │ ├── pages.json # 页面路由配置 │ └── pages/ # 页面组件目录 ├── uni.scss # 全局样式变量 └── vue.config.js # 构建配置 ``` 四、关键配置验证 1. 检查package.json应包含: ```json { "dependencies": { "@dcloudio/uni-app": "^3.0.0-alpha-3040020221209001", "vue": "^3.2.45" } } ``` 2. 检查main.js应为Vue3写法: ```javascript import { createSSRApp } from 'vue' import App from './App.vue' export function createApp() { const app = createSSRApp(App) return { app } } ``` 五、运行与调试 ```bash # 微信小程序 npm run dev:mp-weixin # H5 npm run dev:h5 # 编译生产环境 npm run build:mp-weixin ``` 六、注意事项 1. 组件差异: - 需使用Vue3组合式API(`setup`语法) - 部分uni原生组件需要v3.3+版本支持 2. 插件兼容性: - 检查第三方插件是否支持Vue3 - 推荐使用uniapp官方插件市场筛选Vue3版本 3. 迁移项目: - 旧项目迁移需逐步替换Options API - 使用`@vue/compat`兼容模式过渡(非官方推荐) 七、常见问题处理 1. 编译报错处理: ```bash # 清除缓存后重试 npm run clean npm install ``` 2. 兼容Vue2写法: ```javascript // 不推荐但支持 export default { setup() { // 组合式API } } ``` 3. TypeScript支持: ```bash vue add typescript ``` 最新版本状态可通过以下命令查询: ```bash npm view @dcloudio/uni-app versions --json ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值