vue-cli是一个简单的vuejs脚手架命令行工具。

安装

准备:Node.js(>=4.x,推荐6.x版本),npm版本3以上和Git。

$npm install -g vue-cli

使用

$vue init <template-name> <project-name>
Example:
$vue init webpack my-project

上面的命令会从vuejs-templates/webpack拉取模板并显示提示信息,最后在./my-project/.下面生成项目。

官方模板

vue官方模板的目标是提供一个opinionated(有态度的)、功能齐备的工具化安装开发环境以方便使用者们迅速的开始自己的应用逻辑编程。但是,他们在使用者怎样设计应用代码结构以及像在vue.js中使用哪些库又是un-opinionated(宽容的)。

PS:这里简单介绍以下什么叫opinionated software,什么叫un-opinionated software。一个软件如果是opinionated,那么它会/引导要求你按照它的规则做事,不允许超出框架。而如果一个软件是un-opinionated,那么它自身并没有太多的规则限制,允许你制定自己的框架规则。

所有的官方项目模板都被保存在vuejs-templates organization中。如果有一个新的模板被加入其中,你将可以通过 vue init <template-name> <project-name> 来使用这个模板。你也可以执行 vue list 来查看所有可用的官方模板。

当前可用的模板包括:

  • webpack - 安装一个带有热加载,静态检测,测试&css提取的全功能Webpack + vue-loader
  • webpack-simple - 安装一个用于快速原型设计的简易版webpack + vue-loader
  • browserify - 安装一个带有热加载,静态检测&单元测试的全功能 Browserify + vueify
  • browserify-simple - 安装一个用于快速原型设计的简易版browserify + vueify
  • pwa - 安装一个vue-cli版的基于webpack模板的pwa模板
  • simple - 安装一个在单页面中可以使用的最简vue

自定义模板

官方模板并不能使每个人都满意。你可以轻易的创建一个官方模板的分支并在vue-cli中使用它:

vue init username/repo my-project

username/repo 就是你的分支在gitHub上的速记标识。

存储库速记标识的执行会通过第三方组件download-git-repo。所以你也可以使用 bitbucket:username/repo 来从BitBucket代码库中获取模板(download-git-repo同时支持链接bitBucketgithub)并使用 username/repo#branch命令选取版本分支。

如果你想要从一个私人库中下载资源,你可以使用--clone标识,这样cli就会在内部使用git clone命令从而确保你的SSH keys被使用。

本地模板

除了可以使用GitHub代码库,你也可以使用一个在你本地文件系统中的模板:

vue init ~/fs/path/to-custom-template my-project

从头开始写自定义的模板

  • 一个模板仓库必须包含一个模板目录用来保存模板文件。

  • 一个模板仓库应该为包含一个meta.js/meta.json文件作为元文件。它必须包含以下的字段:
  1. prompts: 用来保存用户选项信息;
  2. filters: 用来对需要渲染的文件进行条件过滤
  3. metalsmith: 用来在链中增加自定义的metalsmith插件
  4. completeMessage: 模板创建之后显示给用户的消息。可以在这里放一些自定义的说明。
  5. complete: 替代completeMessage,你也可以在模板创建之后运行一个函数来执行所有工作.

prompts

元数据文件中的prompts字段是一个对象,包含了对用户的询问信息。对于每一条询问信息,key是变量名value值是inquirer.js 的一个question对象。举例来说

{
"prompts": {
"name": {
"type": "string",
"required": true,
"message": "Project name"
}
}
}

当所有的询问结束,所有在模板中的文件就会用之前询问得到的结果通过HandleBars重新渲染。

条件prompts

如果想要某一条询问提示在一定条件下显示,可以添加一个when字段。这个字段的value应该关联之前的询问的数据。举例来说

{
"prompts": {
"lint": {
"type": "confirm",
"message": "Use a linter?"
},
"lintConfig": {
"when": "lint",
"type": "list",
"message": "Pick a lint config",
"choices": [
"standard",
"airbnb",
"none"
]
}
}
}

只有在用户对"lint"询问提示回答了Yes, lintConfig这条提示才会被触发。

预登记Handlebars Helpers

if_eq和unless_eq是两个最常用的HandleBars Helpers,使用方法如下

{{#if_eq lintConfig "airbnb"}};{{/if_eq}}

自定义Handlebars Helpers

你可能会希望在元文件中自行注册并使用一些额外的HandleBars Helpers特性。对象的key就是helper名:

module.exports = {
helpers: {
lowercase: str => str.toLowerCase()
}
}

注册后, 可以想下面这样使用:

{{ lowercase name }}

文件过滤

元数据文件中的filters字段应该是一个包含文件过滤规则的对象哈希。其中每个条目的key都应该是用于进行glob最小正则匹配的字符串,其对应的value应当是prompt获取到的结果字符串。如

{
"filters": {
"test/**/*": "needTests"
}
}

只有用户对needTests这个询问回答Yes,test下面的文件才会生成 。

注意进行最小匹配的dot选项被配置成了true,默认dotfiles也会被匹配到。

dotfiles: 以.号开头的文件(一般指配置文件)。

跳过渲染

元文件中的skipInterpolation字段应该使用glob进行最小正则匹配。被匹配到的文件会跳过渲染,举例如下:

{
"skipInterpolation": "src/**/*.vue"
}

Metalsmith

vue-cli 使用metalsmith来生成工程.

你可以定制vue-cli创建的metalsmith builder来注册自定义的插件

{
"metalsmith": function (metalsmith, opts, helpers) {
function customMetalsmithPlugin (files, metalsmith, done) {
// Implement something really custom here.
done(null, files)
} metalsmith.use(customMetalsmithPlugin)
}
}

如果你想要在questions被提出前处理metalsmith,那么你需要使用一个以"bofore"作为key的对象。

{
"metalsmith": {
before: function (metalsmith, opts, helpers) {},
after: function (metalsmith, opts, helpers) {}
}
}

在meta.{js,json}中可以使用的附加数据

  • destDirName - 目标目录名称
{
"completeMessage": "To get started:\n\n cd {{destDirName}}\n npm install\n npm run dev"
}
  • inPlace - 在当前目录下生成模板
{
"completeMessage": "{{#inPlace}}To get started:\n\n npm install\n npm run dev.{{else}}To get started:\n\n cd {{destDirName}}\n npm install\n npm run dev.{{/inPlace}}"
}

complete函数

参数:

  • data:你可以在completeMessage中访问到的同样的数据
{
complete (data) {
if (!data.inPlace) {
console.log(`cd ${data.destDirName}`)
}
}
}
  • helpers: 一些在你记录日志的时候可能用到的帮助信息

chalk: chalk模型

logger: 内置的日志对象

files: 记录生成文件的数组

{
complete (data, {logger, chalk}) {
if (!data.inPlace) {
logger.log(`cd ${chalk.yellow(data.destDirName)}`)
}
}
}

安装指定版本号的模板

vue-cli使用第三方插件download-git-repo来下载使用的官方模板。download-git-repo工具允许通过在项目名称后面加上一个#号来指定分支名。

指定一个官方模板的格式是:

vue init '<template-name>#<branch-name>' <project-name>
Example:

安装webpack-sample vue模板的1.0分支版本

vue init 'webpack-simple#1.0' mynewproject

注意:因为#号的特殊含义,在zsh shells上两边的分号是必须的。

想查看英语原文请看  https://www.npmjs.com/package/vue-cli#vue-build

vue-cli简介(中文翻译)的更多相关文章

  1. 中文翻译:pjsip教程(一)之PJNATH简介

    在学习pjsip的过程中,发现只是单单的阅读英文官方文档,对于里边概念的理解还是不够透彻,并且苦于pjsip没有发现全一点的中文版本,所以想尽自己所能为建设和谐社会而贡献一份力量,文中定会有所疏漏,希 ...

  2. [中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)

    本文出处  [中文翻译] ASP.NET 5 简介(Introducing ASP.NET 5,原作ScottGu 2015/2/23) 这是我的文章备份 http://www.dotblogs.co ...

  3. Vue 3.0 Composition API - 中文翻译

    Composition API 发布转载请附原文链接 https://www.cnblogs.com/zgh-blog/articles/composition_api.html 这两天初步了解了下 ...

  4. [转]Vue CLI 3搭建vue+vuex 最全分析

    原文地址:https://my.oschina.net/wangnian/blog/2051369 一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@ ...

  5. Vue CLI 3搭建vue+vuex 最全分析

    一.介绍 Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm 包,提供了终端里的vue命令(如:vue create .vue ...

  6. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  7. 中文翻译:pjsip文档(四)之ICE Session的使用方法

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  8. Vue CLI 3+tinymce 5富文本编辑器整合

    基于Vue CLI 3脚手架搭建的项目整合tinymce 5富文本编辑器,vue cli 2版本及tinymce 4版本参考:https://blog.csdn.net/liub37/article/ ...

  9. 如何使用@vue/cli 3.0在npm上创建,发布和使用你自己的Vue.js组件库

    译者按: 你可能npm人家的包过成千上万次,但你是否有创建,发布和使用过自己的npm包? 原文: How to create, publish and use your own VueJS Compo ...

  10. Vue Cli安装以及使用

      因为公司项目要用vue框架,所以会用vue-cli来新建项目.用过vue的都知道,要全局安装vue以及脚手架vue-cli,然后执行vue init webpack projectname来新建v ...

随机推荐

  1. JDK8新特性:Lambda表达式

    Lambda表达式,案例一:new Thread(() -> System.out.println("thread")); Lambda表达式,案例二:由参数/箭头和主体组成 ...

  2. wget 批量下载网站目录下的文件

    执行如下命令就会自动下载 http://www.iyunwei.com/docs/ 下面的所有文件: wget -nd -r -l1 --no-parent http://www.iyunwei.co ...

  3. servlet 中文编码设置

    Tomcat服务器默认采用的ISO8859-1编码 产生的原因: 不同数据来源的编(解)码格式不同: 数据来源 默认编码格式 浏览器页面 GBK(可在浏览器页面右键切换) request(get) I ...

  4. CallableStatement的用法

    CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法.已储存过程储存在数据库中.对已储存过程的调用是 CallableStatement 对象所含的内容 ...

  5. JS常见的四种设计模式

    1 工厂模式 简单的工厂模式可以理解为解决多个相似的问题; function CreatePerson(name,age,sex) { var obj = new Object(); obj.name ...

  6. [Ynoi2015]此时此刻的光辉

    题目大意: 给定一个序列,每次询问一段区间的数的乘积的约数个数. 解题思路: 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐 ...

  7. 设置随机 User-Agent

    本文转载自以下网站: Scrapy 中设置随机 User-Agent 的方法汇总 https://www.makcyun.top/web_scraping_withpython14.html 一行代码 ...

  8. Codeforces 902B - Coloring a Tree

    传送门:http://codeforces.com/contest/902/problem/B 本题是一个关于“树”的问题. 有一棵n个结点的有根树,结点按照1~n编号,根结点为1.cv为结点v的色号 ...

  9. 【Codeforces Round #519 by Botan Investments C】 Smallest Word

    [链接] 我是链接,点我呀:) [题意] [题解] 模拟了一两下.. 然后发现. 对于每一个前缀. 组成的新的最小字典序的字符串 要么是s[i]+reverse(前i-1个字符经过操作形成的最大字典序 ...

  10. 图论·Floyd算法·HDU2544&1874 (伪)2066

    在看到1874的题时,第一反应是用上一篇的并查集方法,后来查了一下是要用Floyd做,所以就去查Floyd算法的资料. 即插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法. 核心代码:  ma ...