在上一篇文章中,我们提到了meta.js,这次我们详细了解一下meta.js里面各个模块的写法。

对于 meta.js/metajson 文件, 目前主要字段如下:

  • prompts<Object>: 收集用户自定义数据
  • filters<Object>: 根据条件过滤文件
  • completeMessage<String>: 模板渲染完成后给予的提示信息, 支持 handlebars 的 mustaches 表达式
  • complete<Function>: 模板渲染完成后的回调函数, 优先于 completeMessage
  • helpers<Object>: 自定义的 Handlebars 辅助函数

一、prompts

prompts是一个对象,对象里的每一个子对象是一个Inquirer.js,与用户进行交互,询问问题的。先看个例子:

{
prompts: {
name: {
type: "input",
message: "项目名"
},
author: {
type: "input",
message: "作者"
},
email: {
type: "input",
message: "邮箱",
validate: function(answer){
if(/@/g.test(answer)){
return true;
}
return "邮箱应该含有@符号";
}
},
vuex: {
type: "confirm",
message: "你的项目中需要安装vuex吗",
default: true
}
}
}
prompts各种参数配置方法
  • type(类型):input(输入,默认类型)confirm(y/n)list(列表)rawlist(带下标的列表)expand(下标是字母的列表)checkbox(复选框)password(密码)editor(编辑大篇文字)。
  • massage(提示信息——问题):字符串或者函数,如果是函数,返回值需要时字符串;默认是name值,如上面的name,author,email,vuex。
  • default(默认值):这个需要跟据类型和选项来给出对应的默认值,这个就不多说了,大家都明白。
  • choices(选项):list,rawlist,expand,checkbox类型需要给出相应的choice供用户选择,数组类型,数组的每个元素可以是字符串也可以是对象。对象可以有name(选之前的提示信息)、value(选的结果)、short(选之后显示的结果)。
  • validate(有效性验证):函数类型,参数是用户输入的结果,验证通过返回true,否则返回一个验证失败的提示。
  • filter(过滤):函数类型,参数是用户输入的结果,filter的处理结果会改变用户输入的结果,这个与后天提到的transformer不同。
  • transformer(转换):函数类型,参数是用户的输入结果,transformer的处理结果是用来展示出来的,不会改变用户输入的最终结果,仅仅是显示的不同。
  • when(控制条件):函数类型,参数是用户的输入结果,当前面的某个结果符合条件时才会询问此问题。
  • pageSize(每页显示的数量):当有choice选项的时候可以给用这个来控制每页显示的数量。

当所有问题问完之后,template 目录下的所有文件将会用 Handlebars 进行渲染. 用户输入的数据会作为模板渲染时的使用数据。

二、filters

filters 字段是一个包含文件过滤规则的对象, 键用于定义符合 minimatch glob pattern 规则的过滤器, 键值是 prompts 中用户的输入值或者表达式,代码如下:

filters: {
"store/*": "vuex"
}

  在上面的询问中,如果你vuex选项选择了no,你的store文件夹以及其下面的子文件将被删除,蜀国选的yes,store文件夹以及其下面的子文件将被保留。

三、helpers

在hleplers中,你可以注册handlebars函数,注册后,在template里面的文件中可以使用你注册的辅助函数。vue自带的有if_eq(判断两个参数相等的)和unless_eq这连个辅助函数。

helpers: {
between(v, v1, v2, options) {
if (v > v1 && v < v2) {
return options.fn(this)
}
return options.inverse(this)
}
}

  

四、complete或completeMessage

complete为一个函数,completeMessage为一个字符串。

如果同时写了这两个,会调用complete函数,即complete的优先级高。

"completeMessage": "请按以下步骤启动,耐心等待:\n\n  {{^inPlace}}cd {{destDirName}}\n  {{/inPlace}}npm i\n  npm run dev 或者 npm start"

  在completeMessage中支持插值表达式的写法。

vue init定制团队模板之meta.js/meta.json写法入门的更多相关文章

  1. vue init定制团队模板使用方法

    每次做项目都要自己搭建项目目录,或者换了公司就的重新搭建项目目录,是不是很麻烦呢?有没有想过一次性把项目目录搭建好,以后直接用呢?你首先想到的可能是复制自己原来的项目,然后删除.修改等等.然而有个更方 ...

  2. vue init深度定制团队自己的Vue template

    大家都知道,使用vue-cli可以快速的初始化一个基于Vue.js的项目,全局安装脚手架之后,你可以通过vue list命令看到官方提供的5个模板 vue list 当开发一个独立项目的时候,使用官方 ...

  3. 定制团队自己的 Vue template

    一,我们使用vue-cli 可以快速初始化vue.js的项目,官方提供了webpack,pwa,browserify-sipmple,等常用template 二.置知识1,模板结构template:该 ...

  4. 解决vue-cli不能初始化webpack模板的问题(vue init卡住了,解决办法)

    报这个错误 有人说是代理问题.我也不懂,但这个方法有用 1.去github上下载要初始化的模板 https://github.com/vuejs-templates/webpack 或者直接用git去 ...

  5. 如何快速的vue init 属于自己的vue模板?

    相信很多接触过vue的小伙伴非常熟悉了,我们在开启项目之前都需要vue init webpack xx来初始化自己的项目目录.但是在实际开发中我们往往会根据公司要求或者业务的需要会对目录进行局部的调整 ...

  6. 用vue官方提供的模板vue-cli搭建一个helloWorld案例

    安装环境 安装node.js并配置环境变量 安装淘宝镜像,npm install -g cnpm --registry=https://registry.npm.taobao.org 安装webpac ...

  7. (尚018-第二章2.1)Vue使用vue-cli创建模板项目

    2.1.1 1)vue-cli是官方提供的脚手架工具(注意:脚手架本身是个库) 2)github:https://github.com/vuejs/vue-cli 3)作用:从https://gith ...

  8. vue init失败解决方案-终极版

    //由于windows系统的某方面问题,vue脚手架安装可能会出现第一证书丢失 // 报错:vue-cli · Failed to download repo vuejs-templates/webp ...

  9. vue脚手架搭建移动端项目--flexible.js

    通过命令行 node -v 查看是否安装node环境 在 nodejs 和 webpack已安装的前提下,随便一个文件夹下,输入命令行 npm install vue-cli -g 安装完成后,通过 ...

随机推荐

  1. Django中的orm的惰性机制

    惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象)[https://www.cnblogs.com/chaojiying ...

  2. Kth Minimum Clique

    Kth Minimum Clique 题目描述 Given a vertex-weighted graph with N vertices, find out the K-th minimum wei ...

  3. NKOJ1469 通向自由的钥匙

    P1469通向自由的钥匙   时间限制 : 10000 MS   空间限制 : 65536 KB 问题描述 通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接.但是每个房间里都有特别 的保护魔 ...

  4. Laravel 批量替换某个字段

    Likeword::offset(16854)->chunk(100, function ($word_list) { foreach ($word_list as $word) { $new ...

  5. JSON和JSONP,原来ajax引用这个来实现跨域访问的

    由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯 ...

  6. web标准中定义id与class有什么区别吗

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x ...

  7. Leetcode693.Binary Number with Alternating Bits交替位二进制数

    给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等. 示例 1: 输入: 5 输出: True 解释: 5的二进制数是: 101 示例 2: 输入: 7 输出 ...

  8. php封装的smarty类实例是怎样

    * @link http://www.smarty.net/* @copyright 2008 New Digital Group, Inc.* @author Monte Ohrt <mont ...

  9. socket in android

    Server  -  JAVA package com.jim.ndkdemo; import android.net.LocalServerSocket; import android.net.Lo ...

  10. oracle如何检查用户是否用了默认密码

    如果使用默认密码,很可能就对你的数据库造成一定的安全隐患,那么可以使用如下的查询获得那些用户使用默认密码 select username "User(s) with Default Pass ...