【uni-app】自动化部署流水线node.js方式,通过vue-cli,npm run build打包

本文详细描述了如何在云效Codeup中使用vue-cli创建uniapp工程,安装node-sass和sass-loader,以及配置打包流程,以便实现自动化部署并支持多种平台。

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

一、需求背景

接到公司需求,要求在云效Codeup创建流水线对发布版本进行控制,流水线作用,可以回滚到以前发布的版本;由于之前创建项目工程是通过HbuilderX可视化方式创建的工程,只能通过HbuilderX打包,现在要求通过vue-cli方式打包,这样才能实现通过node.js方式完成流水线自动化部署;废话不多说了,直接开始操作

二、node环境版本

在这里插入图片描述

这里是我调试通过的版本,其他验证的一些版本下载node-sass,sass-loader会报错,可能其他版本能通过,先完成工作,有空研究研究

三、新建一个新的工程

uniapp cli工程创建,uniapp cli官方文档

1、环境安装

全局安装 vue-cli

npm install -g @vue/cli

2、创建uni-app

  • 使用正式版(对应HBuilderX最新正式版)
vue create -p dcloudio/uni-preset-vue my-project
  • 使用alpha版(对应HBuilderX最新alpha版)
vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project

bash命令运行成功后选择默认模板,然后等待运行完成,这样就创建好了一个新的项目
在这里插入图片描述

npm run dev:%PLATFORM%
npm run build:%PLATFORM%

如果运行 vue create -p dcloudio/uni-preset-vue my-project 报错,不能创建项目,这时我们就换一种方式来创建项目,
在这里插入图片描述

vue create -p '下载解压后的文件夹路径' my-project

在这里插入图片描述

3、创建好项目进行修改

  • 创建好的项目如下
    在这里插入图片描述
  • 打开项目,将之前的uniapp工程全部复制粘贴到新建项目src目录里面,遇到重复文件替换目标文件
    在这里插入图片描述
  • 修改main.js ,如果原来有就不用改,没有就加上 import ‘./uni.promisify.adaptor’,目的是保持新创建项目一致
    在这里插入图片描述

四、安装node-sass ,sass-loader

npm install node-sass@4.14.1 --save
npm install sass-loader@7.1.0 --save
  • 运行npm run serve
npm run serve

在这里插入图片描述
运行成功,查看运行的工程是否正确,检查完成没有问题,就可以打包了

npm run build
  • npm run build 默认是打包H5工程包,若是需要打包其他平台,如下方式,package.json脚本:
    在这里插入图片描述

五、如上方式报错出问题啦,不想配置快捷方式

  • 创建好新工程 ,第二步:创建uni-app
  • node版本还是前面提到的版本
  • 删除node_modules, package-lock.json
  • 复制如下package.json内容到工程的package.json,Ctrl+C,Ctrl+A,Ctrl+v,替换新创建工程package.json
  • package.json文件内容如下:
{
  "name": "uniapp-build",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "npm run dev:h5",
    "build": "npm run build:h5",
    "build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build",
    "build:custom": "cross-env NODE_ENV=production uniapp-cli custom",
    "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
    "build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build",
    "build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build",
    "build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build",
    "build:mp-jd": "cross-env NODE_ENV=production UNI_PLATFORM=mp-jd vue-cli-service uni-build",
    "build:mp-kuaishou": "cross-env NODE_ENV=production UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build",
    "build:mp-lark": "cross-env NODE_ENV=production UNI_PLATFORM=mp-lark vue-cli-service uni-build",
    "build:mp-qq": "cross-env NODE_ENV=production UNI_PLATFORM=mp-qq vue-cli-service uni-build",
    "build:mp-toutiao": "cross-env NODE_ENV=production UNI_PLATFORM=mp-toutiao vue-cli-service uni-build",
    "build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
    "build:mp-xhs": "cross-env NODE_ENV=production UNI_PLATFORM=mp-xhs vue-cli-service uni-build",
    "build:quickapp-native": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-native vue-cli-service uni-build",
    "build:quickapp-webview": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview vue-cli-service uni-build",
    "build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build",
    "build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build",
    "dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch",
    "dev:custom": "cross-env NODE_ENV=development uniapp-cli custom",
    "dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
    "dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch",
    "dev:mp-alipay": "cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch",
    "dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch",
    "dev:mp-jd": "cross-env NODE_ENV=development UNI_PLATFORM=mp-jd vue-cli-service uni-build --watch",
    "dev:mp-kuaishou": "cross-env NODE_ENV=development UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build --watch",
    "dev:mp-lark": "cross-env NODE_ENV=development UNI_PLATFORM=mp-lark vue-cli-service uni-build --watch",
    "dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch",
    "dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch",
    "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
    "dev:mp-xhs": "cross-env NODE_ENV=development UNI_PLATFORM=mp-xhs vue-cli-service uni-build --watch",
    "dev:quickapp-native": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-native vue-cli-service uni-build --watch",
    "dev:quickapp-webview": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview vue-cli-service uni-build --watch",
    "dev:quickapp-webview-huawei": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build --watch",
    "dev:quickapp-webview-union": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build --watch",
    "info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js",
    "serve:quickapp-native": "node node_modules/@dcloudio/uni-quickapp-native/bin/serve.js",
    "test:android": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=android jest -i",
    "test:h5": "cross-env UNI_PLATFORM=h5 jest -i",
    "test:ios": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=ios jest -i",
    "test:mp-baidu": "cross-env UNI_PLATFORM=mp-baidu jest -i",
    "test:mp-weixin": "cross-env UNI_PLATFORM=mp-weixin jest -i"
  },
  "dependencies": {
    "@dcloudio/uni-app": "^2.0.2-3081220230817001",
    "@dcloudio/uni-app-plus": "^2.0.2-3081220230817001",
    "@dcloudio/uni-h5": "^2.0.2-3081220230817001",
    "@dcloudio/uni-i18n": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-360": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-alipay": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-baidu": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-jd": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-kuaishou": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-lark": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-qq": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-toutiao": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-vue": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-weixin": "^2.0.2-3081220230817001",
    "@dcloudio/uni-mp-xhs": "^2.0.2-3081220230817001",
    "@dcloudio/uni-quickapp-native": "^2.0.2-3081220230817001",
    "@dcloudio/uni-quickapp-webview": "^2.0.2-3081220230817001",
    "@dcloudio/uni-stacktracey": "^2.0.2-3081220230817001",
    "@dcloudio/uni-stat": "^2.0.2-3081220230817001",
    "@vue/shared": "^3.0.0",
    "autoprefixer": "^8.0.0",
    "core-js": "^3.8.3",
    "flyio": "^0.6.2",
    "node-sass": "^4.14.1",
    "postcss": "^8.2.2",
    "postcss-loader": "^7.3.3",
    "sass-loader": "^7.1.0",
    "vue": ">= 2.6.14 < 2.7",
    "vuex": "^3.2.0"
  },
  "devDependencies": {
    "@dcloudio/types": "^3.3.2",
    "@dcloudio/uni-automator": "^2.0.2-3081220230817001",
    "@dcloudio/uni-cli-i18n": "^2.0.2-3081220230817001",
    "@dcloudio/uni-cli-shared": "^2.0.2-3081220230817001",
    "@dcloudio/uni-helper-json": "*",
    "@dcloudio/uni-migration": "^2.0.2-3081220230817001",
    "@dcloudio/uni-template-compiler": "^2.0.2-3081220230817001",
    "@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.2-3081220230817001",
    "@dcloudio/vue-cli-plugin-uni": "^2.0.2-3081220230817001",
    "@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.2-3081220230817001",
    "@dcloudio/webpack-uni-mp-loader": "^2.0.2-3081220230817001",
    "@dcloudio/webpack-uni-pages-loader": "^2.0.2-3081220230817001",
    "@vue/cli-plugin-babel": "~5.0.0",
    "@vue/cli-service": "~5.0.0",
    "babel-plugin-import": "^1.11.0",
    "cross-env": "^7.0.2",
    "jest": "^25.4.0",
    "mini-types": "*",
    "miniprogram-api-typings": "*",
    "postcss-comment": "^2.0.0",
    "vue-template-compiler": ">= 2.6.14 < 2.7"
  },
  "browserslist": [
    "Android >= 4.4",
    "ios >= 9"
  ],
  "uni-app": {
    "scripts": {}
  }
}

  • 执行 npm install
npm install
npm run serve
npm run build

执行到这儿,就大工告成了

不常写文章,若有帮助请帮帮忙点赞,若有问题或有不对的地方请留言,及时改正。谢谢了

### 使用 Uni-App 进行 H5 打包 #### 准备工作 为了能够顺利地将 Uni-App 项目打包成 H5 并部署至服务器,需先完成一些准备工作。确保本地环境已安装 Node.jsnpm 或者 yarn 工具,这是运行 Vue CLI 及其插件所必需的基础环境。 #### 修改 `manifest.json` 配置文件 在开始打包之前,建议调整位于根目录下的 `manifest.json` 文件中的配置项来适应目标平台的需求。特别是对于 H5 应用来说,可以在此处设定应用名称、启动页图片以及其他元数据信息[^1]。 ```json { "name": "YourAppName", "description": "A brief description of your app.", ... } ``` #### 安装依赖并构建项目 进入命令行工具,在项目的根目录下执行如下指令以安装所需的全部依赖: ```bash npm install # or yarn install ``` 接着,可以通过下面这条命令来进行针对 H5 的编译操作: ```bash npm run build:h5 # or with Yarn yarn build:h5 ``` 这一步骤会读取源码并将它们转换为适合浏览器解析的形式,最终输出到指定路径下的 dist 文件夹内。 #### 自动化发布流程 (可选) 如果希望简化重复性的手动部署过程,则可以考虑利用 Jenkins CI/CD 流水线配合官方提供的 CLI 命令实现自动化发布的功能。具体做法是在 Jenkins 中创建一个新的 Job,并在其脚本部分加入类似这样的语句: ```bash jenkins-cli.bat publish --platform h5 --project YourProjectName > cli_output.log 2> cli_error.log ``` 上述代码片段展示了如何借助 Jenkins 的远程调用来触发一次完整的 uni-app 构建与上传动作,同时记录日志以便后续排查可能出现的问题[^2]。 #### 实现微信分享功能 (可选) 为了让基于 Uni-App 开发的应用更好地融入社交场景之中,不妨尝试集成来自微信公众平台所提供的 JS SDK 来增强用户体验。比如当用户点击页面上的某个按钮时自动弹出带有预览图标的对话框邀请好友一起参与活动等互动行为都可以通过以下方式轻松达成: ```javascript wx.config({ debug: false, appId: 'your_app_id', timestamp: response.data.timestamp, nonceStr: response.data.nonceStr, signature: response.data.signature, jsApiList: ['updateAppMessageShareData'] }); ``` 这段 JavaScript 代码负责初始化微信内置浏览器内的 API 接口权限校验机制;而真正用于定制分享卡片外观样式的则是另一个名为 `updateAppMessageShareData()` 的函数[^3]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜又爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值