成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于taro搭建小程序多項目框架

開發
為什么需要這樣一個框架,以及這個框架帶來的好處是什么?

前言

為什么需要這樣一個框架,以及這個框架帶來的好處是什么?

從字面意思上理解:該框架可以用來同時管理多個小程序,并且可以抽離公用組件或業務邏輯供各個小程序使用。當你工作中面臨這種同時維護多個小程序的業務場景時,可以考慮使用這種模式。靈感來自webpack的多項目打包構建

起步

首先你得先安裝好taro腳手架,然后基于該腳手架生成一個taro項目

初始化taro項目

taro init miniApp

這是我選擇的初始化配置,你當然也可以選擇其它模版,只要編譯工具選擇webpack就可以,下面的步驟基本相同

打開項目安裝依賴

pnpm install

這樣一個基本的taro項目就生成好了,但這樣只是生成了一個小程序,那我們如果有許多個小程序是不是還要按上面這些步驟繼續生成,當然不需要,這樣不僅費時間,而且難以維護。

下面我們就來把這個框架改造成支持同時管理多個小程序。

改造(支持多小程序)

此時的項目結構是這樣的:

  • config下面是一些小程序以及webpack的配置
  • src下面是我們小程序的項目代碼
  • project.config.json是當前小程序配置文件
  • ...

改造目錄

在src目錄下新增目錄:apps、common

  • apps:小程序目錄,存放各個小程序的代碼
  • common:公用目錄,存放公用組件及業務邏輯代碼

apps

這里每個小程序對應一個文件夾,里面存放對應小程序的代碼

這里需要把根目錄下的project.config.json放到小程序目錄下,因為每個小程序都需要自己的配置文件

比如:nanjiu、nanjiu_notebook兩個小程序

common

這里主要是存放公用代碼:組件、業務、請求

修改配置

config/index.js

import path from 'path'
const app = process.env.APP

const config = {
  projectName: 'mini_app',
  date: '2024-1-21',
  designWidth: 750,
  deviceRatio: {
    640: 2.34 / 2,
    750: 1,
    828: 1.81 / 2
  },
  sourceRoot: `src/apps/${app}`, // 項目源碼目錄
  outputRoot: `${app.toUpperCase()}APP`,  // 打包產物目錄
  alias: {
    '@/common': path.resolve(__dirname, '..', 'src/common'), // 別名配置
  },
// ....

module.exports = function (merge) {
  if (process.env.NODE_ENV === 'development') {
    return merge({}, config, require('./dev'))
  }
  return merge({}, config, require('./prod'))
}

這里需要注意的是sourceRoot,因為要支持多小程序,那么這里就不能固定寫死了,我們可以在啟動時通過傳參來區分當前啟動或打包哪個小程序。

自定義構建腳本

在項目根目錄新建文件夾build存放構建腳本

// cli.js
const shell = require('shelljs')
const fs = require('fs')
const path = require('path')
const inquirer = require('inquirer')


const action = process.argv[2]
let app =  process.argv[3]
const runType = action == 'dev' ? '啟動': '打包'

function start() {
  // 處理配置文件
  process.env.APP = app
  console.log(`????????????正在${runType}小程序:${app}`)
  let cmd = ''
  if(action == 'dev') {

    cmd = `taro build --type weapp --watch --app ${app}`

  } else {

    cmd = `taro build --type weapp --app ${app}`

  }

  const child = shell.exec(cmd, {async:true})
  child.stdout.on('data', function() {
    // console.log(data)
  })
}
// ...

start()

配置腳本命令

//package.json

// ...

"scripts": {
  "start": "node build/cli.js dev",
  "build": "node build/cli.js build",
}

驗證

所有工作完成后,可以來看看這個框架能不能滿足我們的需求

命令執行成功,項目根目錄下會生成對應的小程序代碼

再把該產物使用小程序開發者工具看是否能跑起來

這邊能夠跑起來,就說明打包沒有問題了,同樣可以驗證其它的小程序

優化構建腳本

多小程序架構搭建完,有同事反饋啟動報錯,我心想:不能吧,我自己都驗證過了,從報錯信息上看他應該是啟動時沒輸入需要啟動的小程序,直接pnpm start了,這樣的話就不知道應該啟動哪個小程序了。其實啟動命令已經在項目文檔上寫了,可能是沒注意看。

那就只能優化優化,盡量避免這種情況,這里主要的邏輯是如果沒有輸入指定的的小程序,通過inquirer開啟交互式命令,讓他選擇要啟動哪個小程序。

// cli.js
const shell = require('shelljs')
const fs = require('fs')
const path = require('path')
const inquirer = require('inquirer')

const action = process.argv[2]
let app =  process.argv[3]
const runType = action == 'dev' ? '啟動': '打包'

if(!app) {
  openInquirer()
  return
}

// 未輸入項目名稱則開啟交互命令行
function openInquirer() {
  const projectList = fs.readdirSync(path.resolve(__dirname, '../src/apps'))
  // 過濾隱藏文件
  projectList.forEach((item, index) => {
    if(item.indexOf('.') == 0) {
      projectList.splice(index, 1)
    }
  })
  const promptList = [
    {
      type: 'list',
      message: '??請選擇啟動的小程序:',
      name: 'pro',
      choices: [...projectList],
    },
  ]
  inquirer.prompt(promptList).then((answers) => {
    app = answers.pro
    start()
  })
}
function start() {
  // 處理配置文件
  process.env.APP = app
  console.log(`????????????正在${runType}小程序:${app}`)
  let cmd = ''
  if(action == 'dev') {

    cmd = `taro build --type weapp --watch --app ${app}`

  } else {

    cmd = `taro build --type weapp --app ${app}`

  }

  const child = shell.exec(cmd, {async:true})
  child.stdout.on('data', function() {
    // console.log(data)
  })
}

start()

這樣就大功告成了!!!

責任編輯:華軒 來源: 前端南玖
相關推薦

2023-03-19 11:47:57

Taro小程序持續集

2024-05-31 09:06:14

2023-02-25 10:00:19

開源項目小程序

2022-08-12 08:38:08

攜程小程序Taro跨端解決方案

2023-07-07 14:12:52

攜程開發

2011-09-05 14:42:01

PhoneGap框架

2009-11-12 16:17:13

.NET

2012-12-03 10:40:25

項目框架搭建asp.net

2016-09-27 17:29:23

騰訊云小程序微信

2021-08-16 11:25:41

Python云服務云辦公

2023-10-12 07:40:54

Minium自動化框架

2023-06-21 08:05:39

開源UI庫互聯網

2020-12-21 06:20:34

內存優化跨端

2016-09-30 09:22:55

2023-09-05 23:29:49

前端Vue

2016-11-04 10:47:27

微信小程序

2016-12-13 10:07:50

JAVA框架搭建

2010-05-25 10:08:29

SVN權限管理

2023-06-29 07:37:26

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜久久久久久久久久一区二区 | 国产精品成人一区二区三区夜夜夜 | 精品日韩一区二区 | 免费播放一级片 | 欧美日韩精品一区二区三区视频 | 免费一看一级毛片 | 亚洲女人天堂网 | 亚洲欧美一区二区三区国产精品 | 国产精品一区二区在线观看 | 欧美精品一区三区 | 精品国产乱码久久久久久老虎 | www.成人免费视频 | 精品国产高清一区二区三区 | 伊人久久精品一区二区三区 | 亚洲精品一区二三区不卡 | 亚洲精品欧美一区二区三区 | 亚洲一区二区久久 | 成人在线视频免费观看 | 欧美aⅴ| 狠狠干五月天 | 91精品久久久久 | 久久久久9999亚洲精品 | 亚洲美女网站 | 99精品一级欧美片免费播放 | 欧美区在线观看 | 日本人爽p大片免费看 | 精品久久久久久亚洲综合网 | 91麻豆精品国产91久久久久久久久 | 精品在线观看一区 | 中文字幕日韩av | 国产成人精品999在线观看 | 亚洲视频免费在线观看 | 国产亚洲一区二区在线观看 | 91精品国产一区二区在线观看 | 亚洲一区二区久久久 | 在线日韩 | 精品久久久久久久久久 | 亚洲人a | 欧美日韩在线观看一区 | www.日韩| 欧美精品91爱爱 |