Taro 項(xiàng)目模板

2021-09-23 21:16 更新

1.3.9 開(kāi)始支持

一直以來(lái),在使用 Taro CLI 的 taro init 命令創(chuàng)建項(xiàng)目時(shí),CLI 會(huì)提供若干內(nèi)置模板給開(kāi)發(fā)者選擇。但是很多團(tuán)隊(duì)都有自己獨(dú)特的業(yè)務(wù)場(chǎng)景,需要使用和維護(hù)的模板也不盡一致,因此從 1.3.9 開(kāi)始我們把項(xiàng)目模板打包成一個(gè)能力賦予給開(kāi)發(fā)者。

1.3.9 對(duì) CLI 的模板功能做了以下修改:

  1. CLI 只保留最基礎(chǔ)的 default 模板,其它模板被移除。
  2. CLI 會(huì)從 CLI 全局配置中讀取模版源配置項(xiàng),然后從模板源拉取模板供開(kāi)發(fā)者選擇。
  3. 開(kāi)發(fā)者可以通過(guò)修改模板源來(lái)使用自己的模板。

模板源

模板源為 CLI 配置項(xiàng)的 templateSource 字段,可以使用 taro config 命令對(duì)其進(jìn)行操作。

默認(rèn)模版源

默認(rèn)模板源為 taro-project-templates 倉(cāng)庫(kù),原本內(nèi)置的模板都被抽離到此處。

配置模板源

模板源支持兩種格式,git 模板源url 模板源。

git 模板源

  • GitHub - github:owner/name
  • GitLab - gitlab:owner/name
  • Direct - direct:url
  1. # 初始化項(xiàng)目時(shí)可以使用 --clone 選項(xiàng)指定拉取遠(yuǎn)程模板時(shí)使用git clone
  2. taro init --clone

url 模板源

指向某 zip 包的 url。

編寫(xiě)模板

模板組織格式

模板目錄組織支持兩種,分別是單模板模式模板組模式。

單模板模式

git

倉(cāng)庫(kù)根目錄存在 package.json。

模板名為倉(cāng)庫(kù)名。

zip 包

zip 包解壓出單文件夾,文件夾根目錄包含 package.json。

模板名為 zip 包解壓出的文件夾名。

template

模板組模式

git

默認(rèn)模板源,倉(cāng)庫(kù)根目錄下存放著若干模板。

模板名對(duì)應(yīng)根目錄下所有文件夾名。

zip 包

zip 包解壓出單文件夾,文件夾內(nèi)包含若干模板。

模板名對(duì)應(yīng)文件夾內(nèi)所有文件夾名。

templates

靜態(tài)模板

靜態(tài)模板表示不帶邏輯的模板,CLI 會(huì)遍歷整個(gè)模板文件夾,把文件一一拷貝到目標(biāo)位置。

動(dòng)態(tài)模板

很多情況下需要為模板加入一些邏輯,從而根據(jù)不同的環(huán)境生成不同的模板內(nèi)容。

開(kāi)發(fā)者可以在模板根目錄加入 template_creator.js 文件,文件對(duì)外 exports 包含 handler 與 basePageFiles 字段的對(duì)象:

  1. function createWhenTs (params) {
  2. return params.typescript ? true : false
  3. }
  4. const handler = {
  5. '/global.d.ts': createWhenTs,
  6. '/tsconfig.json': createWhenTs,
  7. '/src/pages/index/index.jsx' ({ pageName }) {
  8. return { setPageName: `/src/pages/${pageName}/${pageName}.jsx` }
  9. },
  10. '/src/pages/index/index.css' ({ pageName}) {
  11. return { setPageName: `/src/pages/${pageName}/${pageName}.css` }
  12. }
  13. }
  14. const basePageFiles = [
  15. '/src/pages/index/index.jsx',
  16. '/src/pages/index/index.css'
  17. ]
  18. module.exports = {
  19. handler,
  20. basePageFiles
  21. }

模板語(yǔ)言

請(qǐng)使用 ejs 作為模板語(yǔ)言,各模板文件都將接收到全局模板參數(shù)。

默認(rèn)全局模板參數(shù)(模板中可直接使用的變量)
變量 類(lèi)型 說(shuō)明
projectName string 項(xiàng)目名
description string 項(xiàng)目描述
version string Taro CLI 版本
date string 模板創(chuàng)建時(shí)間戳
css ‘none’ or ‘sass’ or ‘stylus’ or ‘less’ 樣式預(yù)處理工具
cssExt string 樣式文件后綴
typescript boolean 是否使用 TS
pageName string taro create 時(shí)傳入的頁(yè)面名稱(chēng),默認(rèn) ‘index’
template string 模板名稱(chēng)
例子
  1. // index.js
  2. <%if (typescript) {-%>
  3. import Taro, { Component, Config } from '@tarojs/taro'
  4. <%} else { -%>
  5. import Taro, { Component } from '@tarojs/taro'
  6. <%}-%>
  7. import { View, Text } from '@tarojs/components'
  8. import './<%= pageName %>.<%= cssExt %>'

handler 字段

handler 用于控制是否生成某文件,或給文件傳入特定參數(shù)。

handler: object
屬性 類(lèi)型 value
文件路徑 function 處理函數(shù)

文件路徑以 “/” 開(kāi)頭,代表模板文件夾根目錄

處理函數(shù)

params: object

屬性 類(lèi)型 說(shuō)明
projectName string 項(xiàng)目名
description string 項(xiàng)目描述
version string Taro CLI 版本
date string 模板創(chuàng)建時(shí)間戳
css ‘none’ or ‘sass’ or ‘stylus’ or ‘less’ 樣式預(yù)處理工具
typescript boolean 是否使用 TS
pageName string 頁(yè)面名稱(chēng)
template string 模板名稱(chēng)
templatePath string 模板路徑
projectPath string 目標(biāo)路徑
period ‘createApp’ or ‘createPage’ taro init 創(chuàng)建項(xiàng)目或 taro create 創(chuàng)建頁(yè)面

return: boolean/object

返回值說(shuō)明

取值 說(shuō)明
true 創(chuàng)建文件
false 不創(chuàng)建文件
object 創(chuàng)建文件,返回的 object 的字段會(huì)被合并到全局模板參數(shù)中。

若返回值為 object,其中某些屬性有特殊作用:

屬性 類(lèi)型 說(shuō)明
setPageName string 將替換當(dāng)前文件的輸出路徑
changeExt boolean 是否自動(dòng)替換文件后綴
例子

當(dāng)用戶(hù)選擇了使用 typescript 時(shí),才生成 global.d.tstsconfig.json 文件。

  1. // template_creator.js
  2. function createWhenTs (params) {
  3. return params.typescript ? true : false
  4. }
  5. const handler = {
  6. '/global.d.ts': createWhenTs,
  7. '/tsconfig.json': createWhenTs
  8. }
  9. module.exports = { handler }

basePageFiles 字段

basePageFiles 告訴 CLI,當(dāng)用戶(hù)使用 taro create 命令創(chuàng)建頁(yè)面時(shí),創(chuàng)建以下文件。

例子

結(jié)合 handler 字段,創(chuàng)建新頁(yè)面。

當(dāng)用戶(hù)使用命令 taro create --page=detail 時(shí),會(huì)創(chuàng)建 /src/pages/detail/detail.jsx/src/pages/detail/detail.css 兩個(gè)文件。

  1. // template_creator.js
  2. const handler = {
  3. '/src/pages/index/index.jsx' ({ pageName }) {
  4. return { setPageName: `/src/pages/${pageName}/${pageName}.jsx` }
  5. },
  6. '/src/pages/index/index.css' ({ pageName}) {
  7. return { setPageName: `/src/pages/${pageName}/${pageName}.css` }
  8. }
  9. }
  10. const basePageFiles = [
  11. '/src/pages/index/index.jsx',
  12. '/src/pages/index/index.css'
  13. ]
  14. module.exports = {
  15. handler,
  16. basePageFiles
  17. }


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)