taro之项目初始化模板

news2024/9/20 16:31:16

项目初始化模板

一直以来,在使用 Taro CLI 的 taro init 命令创建项目时,CLI 会提供若干内置模板给开发者选择。但是很多团队都有自己独特的业务场景,需要使用和维护的模板也不尽一致,因此 Taro 支持把项目模板打包成一个能力赋予给开发者。

1.3.9 对 CLI 的模板功能做了以下修改:

  1. CLI 只保留最基础的 default 模板,其它模板被移除。
  2. CLI 会从 CLI 全局配置中读取模版源配置项,然后从模板源拉取模板供开发者选择。
  3. 开发者可以通过修改模板源来使用自己的模板。

模板源​

模板源为 CLI 配置项的 templateSource 字段,可以使用 taro config 命令对其进行操作。

默认模版源​

默认模板源为 taro-project-templates 仓库,原本内置的模板都被抽离到此处。

配置模板源​

模板源支持两种格式,git 模板源 和 url 模板源

git 模板源​

  • GitHub - github:owner/name
  • GitLab - gitlab:owner/name
  • Direct - direct:url
# 初始化项目时可以使用 --clone 选项指定拉取远程模板时使用git clone
taro init --clone

url 模板源​

指向某 zip 包的 url。

编写模板​

模板组织格式​

模板目录组织支持两种,分别是单模板模式模板组模式

单模板模式​

git​

仓库根目录存在 package.json。

模板名为仓库名。

zip 包​

zip 包解压出单文件夹,文件夹根目录包含 package.json。

模板名为 zip 包解压出的文件夹名。

模板组模式​

git​

如默认模板源,仓库根目录下存放着若干模板。

模板名对应根目录下所有文件夹名。

zip 包​

zip 包解压出单文件夹,文件夹内包含若干模板。

模板名对应文件夹内所有文件夹名。

静态模板​

静态模板表示不带逻辑的模板,CLI 会遍历整个模板文件夹,把文件一一拷贝到目标位置。

动态模板​

很多情况下需要为模板加入一些逻辑,从而根据不同的环境生成不同的模板内容。

开发者可以在模板根目录加入 template_creator.js 文件,文件对外 exports 包含 handler 与 basePageFiles 字段的对象:

template_creator.js

function createWhenTs (params) {
  return params.typescript ? true : false
}

const handler = {
  '/global.d.ts': createWhenTs,
  '/tsconfig.json': createWhenTs,
  '/src/pages/index/index.jsx' ({ pageName }) {
    return { setPageName: `/src/pages/${pageName}/${pageName}.jsx` }
  },
  '/src/pages/index/index.css' ({ pageName}) {
    return { setPageName: `/src/pages/${pageName}/${pageName}.css` }
  }
}

const basePageFiles = [
  '/src/pages/index/index.jsx',
  '/src/pages/index/index.css'
]

module.exports = {
  handler,
  basePageFiles
}

模板语言​

请使用 ejs 作为模板语言,各模板文件都将接收到全局模板参数。

默认全局模板参数(模板中可直接使用的变量)​

变量类型说明
projectNamestring项目名
descriptionstring项目描述
versionstringTaro CLI 版本
datestring模板创建时间戳
css'none' or 'sass' or 'stylus' or 'less'样式预处理工具
cssExtstring样式文件后缀
typescriptboolean是否使用 TS
pageNamestringtaro create 时传入的页面名称,默认 'index'
templatestring模板名称

例子​

index.js

<%if (typescript) {-%>
import Taro, { Component, Config } from '@tarojs/taro'
<%} else { -%>
import Taro, { Component } from '@tarojs/taro'
<%}-%>
import { View, Text } from '@tarojs/components'
import './<%= pageName %>.<%= cssExt %>'

handler 字段​

handler 用于控制是否生成某文件,或给文件传入特定参数。

handler: object​

属性类型value
文件路径function处理函数

文件路径以 “/” 开头,代表模板文件夹根目录

处理函数​

params: object

属性类型说明
projectNamestring项目名
descriptionstring项目描述
versionstringTaro CLI 版本
datestring模板创建时间戳
css'none' or 'sass' or 'stylus' or 'less'样式预处理工具
typescriptboolean是否使用 TS
pageNamestring页面名称
templatestring模板名称
templatePathstring模板路径
projectPathstring目标路径
period'createApp' or 'createPage'taro init 创建项目或 taro create 创建页面

return: boolean/object

返回值说明

取值说明
true创建文件
false不创建文件
object创建文件,返回的 object 的字段会被合并到全局模板参数中。

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

属性类型说明
setPageNamestring将替换当前文件的输出路径
changeExtboolean是否自动替换文件后缀

例子​

当用户选择了使用 typescript 时,才生成 global.d.ts 和 tsconfig.json 文件。

template_creator.js

function createWhenTs (params) {
  return params.typescript ? true : false
}

const handler = {
  '/global.d.ts': createWhenTs,
  '/tsconfig.json': createWhenTs
}

module.exports = { handler }

basePageFiles 字段​

basePageFiles 告诉 CLI,当用户使用 taro create 命令创建页面时,创建以下文件。

例子​

结合 handler 字段,创建新页面。

当用户使用命令 taro create --page=detail 时,会创建 /src/pages/detail/detail.jsx 与 /src/pages/detail/detail.css 两个文件。

template_creator.js

const handler = {
  '/src/pages/index/index.jsx' ({ pageName }) {
    return { setPageName: `/src/pages/${pageName}/${pageName}.jsx` }
  },
  '/src/pages/index/index.css' ({ pageName}) {
    return { setPageName: `/src/pages/${pageName}/${pageName}.css` }
  }
}

const basePageFiles = [
  '/src/pages/index/index.jsx',
  '/src/pages/index/index.css'
]

module.exports = {
  handler,
  basePageFiles
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript奇技淫巧:debugger拦截

debugger指令&#xff0c;一般用于调试&#xff0c;在如浏览器调试执行环境中&#xff0c;可以在JavaScript代码中产生中断。 如果想要拦截debugger&#xff0c;是不容易的&#xff0c;常用的函数替代、proxy方法均对它无效&#xff0c;如&#xff1a; window.debugger (fun…

电脑音乐相册软件推荐 电脑音乐相册制作方法

音乐相册就是把照片剪辑成视频&#xff0c;并配上动听的音乐。音乐相册很适合保存照片&#xff0c;记录生活&#xff0c;传达出拍摄者当时的心情。下面为大家带来电脑音乐相册软件推荐&#xff0c;电脑音乐相册制作方法。 一、电脑音乐相册软件推荐 很多小伙伴在制作音乐相册…

大数据Doris(三):Apache Doris分布式部署准备工作

文章目录 Apache Doris分布式部署准备工作 一、Apache Doris下载 二、节点划分 三、节点配置 1、设置文件句柄数 2、时间同步 3、关闭 Swap 分区 4、调大单个进程的虚拟内存区域数量 Apache Doris分布式部署准备工作 部署Apache Doris时需要分别部署FE、BE、Broker。然…

iOS - RunLoop 基本原理介绍

一、Runloop 简介 Runloop 是通过内部维护事件循环来对事件/消息进行管理的一个对象。 事件循环&#xff08;状态切换&#xff09; 没有消息需要处理时&#xff0c;休眠以避免资源占用&#xff08;用户态 -> 内核态&#xff09;有消息需要处理时&#xff0c;立刻被唤醒&a…

电视盒子什么牌子好?数码博主盘点2022电视盒子排行榜

网络电视盒子是电视机的标配&#xff0c;开放性的安卓系统能观看海量视频资源&#xff0c;我每年也会进行电视盒子的测评&#xff0c;今天要来分享五款最热门的网络电视盒子推荐&#xff0c;跟着我一起看看网络电视盒子哪个好。 一&#xff1a;泰捷WEBOX60Pro电视盒子 年度…

【华为HCIP | 高级网络工程师】刷题日记(1)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;落. &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️ 零基础…

03-stable diffusion国风小姐姐

stable diffusion 文生图 – 生成国风小姐姐 一、模型在哪里下载 下载网站civitai&#xff1a; Civitai | Stable Diffusion models, embeddings, LoRAs and more国风主模型&#xff1a;https://civitai.com/models/14171/cutegirlmix4主模型放到sd-webui-aki-v4\models\Stab…

【AUTOSAR】【信息安全】CSM

目录 一、概述 二、依赖模块 三、功能描述 3.1 基本体系结构 3.2 通用行为 3.2.1 正常操作 3.2.2 设计说明 3.3 错误分类 3.3.1 开发错误 3.3.2 运行时错误 四、API接口 4.1 通用接口 4.2 加密接口 4.3 秘钥接口 4.4 Job接口 4.5 回调接口 4.6 调度接口 一、概…

配置中心基本原理

配置中心是如何实现推送的&#xff1f; 背景 传统的静态配置方式想要修改某个配置时&#xff0c;必须重新启动一次应用&#xff0c;如果是数据库连接串的变更&#xff0c;那可能还容易接受一些&#xff0c;但如果变更的是一些运行时实时感知的配置&#xff0c;如某个功能项的…

ROS学习第四十一节——SLAM建图

https://download.csdn.net/download/qq_45685327/87721374 准备工作 请先安装相关的ROS功能包: 安装 gmapping 包(用于构建地图):sudo apt install ros-melodic-gmapping 安装地图服务包(用于保存与读取地图):sudo apt install ros-melodic-map-server 安装 navigation 包…

Java -- 多线程

多线程 并发 在同一时刻&#xff0c;有多个指令在单个CPU上交替执行 CPU在多个线程之间交替执行 并行 在同一时刻&#xff0c;有多个指令在多个CPU上同时执行 多线程的实现方式 继承Thread类的方法进行实现实现Runnable接口的方式进行实现利用Callable接口和Future接口方…

数据库基础篇 《17.触发器》

数据库基础篇 《17.触发器》 在实际开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;有 2 个或者多个相互关联的表&#xff0c;如商品信息和库存信息分别存放在 2 个不同的数据表中&#xff0c;我们在添加一条新商品记录的时候&#xff0c;为了保证数据的完整性&#…

【刷题之路】LeetCode 203. 移除链表元素

【刷题之路】LeetCode 203. 移除链表元素 一、题目描述二、解题1、方法1——在原链表上动刀子1.1、思路分析1.2、代码实现 2、方法2——使用额外的链表2.1、思路分析2.2、代码实现 一、题目描述 原题连接&#xff1a; 203. 移除链表元素 题目描述&#xff1a; 给你一个链表的…

跨数据中心下的 Kafka 高可用架构分析

导语 本文介绍了 Kafka 跨数据中心的两种部署方式&#xff0c;简要分析两种方式下的不同架构以及优缺点&#xff0c;对这些架构可能碰到的问题也提供了一些解决思路&#xff1b;同时也说明了 Kafka 跨数据中心部署的社区解决方案和商业化解决方案。 背景 Kafka 作为世界上最…

laravel5.6.* + vue2 创建后台

本地已经安装好了composer 1.新建 Laravel5.6.*项目 composer create-project --prefer-dist laravel/laravel laravel5vue2demo 5.6.* 2. cd laravel5vue2demo 3. npm install /routes/web.php 路由文件中, 修改 Route::get(/, function () {return view(index); });新建…

第三方jar包引入项目,发布到本地和远程仓库

在开发过程中&#xff0c;往往会遇到对接其他公司的系统。然后对接公司会提供API对接方式&#xff0c;就是给一个jar包。我们只需要把jar包引入到项目中直接用即可。本地引用jar的话可以有两种方式。第一种就是本地包引用&#xff0c;如下将包放下工程下&#xff0c;然后maven指…

【五一劳动节来了】

今年“五一”&#xff0c;4月29日至5月3日放假调休&#xff0c;共5天。 如果你在5月4日到5月6日请假3天&#xff0c;加上5月7日周日&#xff0c;就可以形成9天的假期。 一&#xff0c;五一劳动节的由来⭐ 国际劳动节又称“五一国际劳动节”“国际示威游行日”&#xff08;英语…

抢先看,甘特图工具DHTMLX gantt 灯箱编辑器通过套件 UI 小部件进行了扩展

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

【STL十四】函数对象(function object)_仿函数(functor)——lambda表达式

【STL十四】函数对象&#xff08;function object&#xff09;_仿函数&#xff08;functor&#xff09;——lambda表达式 一、函数对象&#xff08;function object&#xff09;二、函数对象优点三、分类四、头文件五、用户定义函数对象demo六、std::内建函数对象1、 算术运算函…

YARN 远程代码执行(RCE)安全漏洞问题分析与解决方案

YARN 远程代码执行&#xff08;RCE&#xff09;安全漏洞问题分析与解决方案 1 YARN RCE 漏洞问题问题现象 某客户使用Tenable.sc扫描安全漏洞后反馈&#xff0c;YARN 存在Remote code execution (RCE) 安全漏洞问题&#xff0c;攻击者可在未经过身份验证的情况下通过该漏洞在…