当前位置: 首页 > 编程日记 > 正文

[Vue CLI 3] 插件编写实战和源码分析

当你看过了官方的几个插件之后,慢慢地,其实你也有需求了。

那如何编写一个 Vue CLI 3 的插件呢?

本文代码已经放到 github 上,地址:https://github.com/dailynodej...


我们建一个文件夹,取名 vue-cli-plugin-demo,创建一个 index.js

module.exports = (api, projectOptions) => {//...
}

因为我们看遍了 cli-plugin-babelcli-plugin-eslint 等,我们发现他们的最外层结构多是类似的:

多有一个 index.js

接受 2 个参数:

  • api
  • options
module.exports = (api, options) => {// ...
}

里面就是插件的核心部分,我们观察到它们两个也很类似,多用到了:

api.chainWebpack(webpackConfig => {// ...
})

但同时在 eslint 的源码中,我们看到了:

api.registerCommand('lint', {
}, args => {// ...
})

我们看项目根目录的 package.json 有一个命令

"scripts": {"lint": "vue-cli-service lint"
}

所以看起来:api.registerCommand 就是可以注册命令的。

大家还记得我们还有其他之前介绍过的命令吗:

"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build"
}

我们看一下它们是不是也是这样注册的:

@vue/cli-service/lib/commands/build/

module.exports = (api, options) => {api.registerCommand('build', {}, async (args) => {})
}

cli-service/lib/commands/serve.js

module.exports = (api, options) => {api.registerCommand('serve', {}, async function serve (args) {})
}

那我们的 demo 也注册一个命令:

module.exports = (api, projectOptions) => {api.registerCommand('demo', {description: 'demo plugin for vue cli 3',usage: 'vue-cli-service demo',options: {}}, (args) => {let options = projectOptions.pluginOptions.demoOptionsconsole.log('options', options)})
}

这里要提到 vue.config.js 里面的一个配置项了 pluginOptions

它可以用来给第三方插件传递配置

所以我们正好可以通过它进行一些配置:

module.exports = {pluginOptions: {demoOptions: {c: 1,d: 2}}
}

然后在插件里面获取的方式就是上面的代码中:

let options = projectOptions.pluginOptions.demoOptions

相关文章:

突然想起99年的那次离别

今天妹妹离开成都回家了突然发现某一件事情又那么蹿了出来了,是99年的秋天那次,同f到成都且分开的那短暂的2天!很多年了,不知道是忘记了再回忆起,还是一直埋在最深处,瞬间又重现!想了&#xff0…

列表组件之ListView

1.ListView是什么 一个显示可滚动项目的视图组件系统使用Adapter(适配器)将列表项目插入列表适配器从来源提取内容 下图从MVC分析的话,ListView相当于View,Adapter相当于Controller,data相当于Model 缺点:屏幕里面只能展示有限个…

C#杂记系列之日期函数

//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString("d"); //2008年4月24日 16:30:15 System.DateTime.Now.ToString("F"); //2008年4月24日 16:30 System.DateTime.Now.ToString("f"); /…

对着电脑笑了二十分钟(2)

25、有一次我大叔见我小姑在搽大宝,突然大叫一声:“你皮肤这么好,还用护舒宝啊?”26、老师留下作业,我不会做就抄别人的,然后去办公室交作业,看见老师说:“我抄完了!”27…

ORACLE临时表空间

https://www.cnblogs.com/kerrycode/p/4006840.html转载于:https://www.cnblogs.com/elontian/p/9564296.html

列表组件之RecyclerView

灵活体现在 ListView 只支持上下滑动 RecyclerView 可以左右滑动,可以瀑布流 并且默认支持布局:线性布局、网络布局 RecyclerView将很多固定模式的地方抽象出来了,如用于动画的ItemAnimator和用于布局的LayoutManager Adapet的特点 1.ViewHo…

【WPF】一个简单的ColorPicker控件

在斯克迪亚看到一篇WPF动态改变主题颜色的文章,来了兴趣,于是自己搞了个简单的ColorPicker控件。 控件其实很简单,定义了5个依赖属性 FinalBrushProperty, AProperty, RProperty, GProperty, BProperty 然后当A,R,G,B发生变化时,…

javascript 利用 - 枚举思想 - 添加地名的一个小例子

利用枚举思想来添加地名&#xff0c;主要功能是&#xff1a;判断点击a标签&#xff08;即当前的地名&#xff09;如果在ul的li不存在的话那么就添加&#xff0c;有则不添加&#xff0c;而且还提供了相应的排序功能... HTML代码&#xff1a; <div id"china"> &l…

[MaxCompute MapReduce实践]通过简单瘦身,解决Dataworks 10M文件限制问题

用户在DataWorks上执行MapReduce作业的时候&#xff0c;文件大于10M的JAR和资源文件不能上传到Dataworks&#xff0c;导致无法使用调度去定期执行MapReduce作业。 解决方案&#xff1a; 第一步&#xff1a;大于10M的resources通过MaxCompute CLI客户端上传&#xff0c; 客户端下…

根据给定数据创建JSON并验证

首先可以判断&#xff0c;temp和weather的值是对象&#xff0c;success的值为布尔型&#xff0c;notification的值为一个数组 {"temp":{"min":11.34,"max":19.01},"weather":{"id":"801","condition":…

C# + MySql 存贮过程开发示例

MySql 发展至今&#xff0c;已经不是当初那个只依靠免费和速度取胜的开源数据库服务器了&#xff0c;它提供的一系列 GUI 工具&#xff0c;以及加入商业数据库的一些特性&#xff0c;依然免费并且开源&#xff0c;让我们实在无法拒绝它的魅力。 很多人在谈及 MySql 可能会条件反…

[C#]判断是否是合法的IP4,IP6地址

判断一个字符串如果没有端口的话&#xff0c;利用IPAddress.TryParse很好判断&#xff0c;那么有端口怎么判断呢&#xff0c;正则表达式&#xff1f;还是其他方式&#xff1f; 关键代码&#xff1a; /// <summary>/// 判断是否是合法的IP4,IP6地址/// </summary>//…

Centos 7使用vsftpd搭建FTP服务器

FTP&#xff0c;即&#xff1a;文件传输协议&#xff08;File Transfer Protocol&#xff09;&#xff0c;基于客户端/服务器模式&#xff0c;默认使用20、21端口号&#xff0c;其中端口20&#xff08;数据端口&#xff09;用于进行数据传输&#xff0c;端口21&#xff08;命令…

Android中的网络(字节跳动)

文章目录RESTful API对REST的解释资源与URI什么是URIHTTP URL的组成Http 接口JSONHttp资源XMLJSONAndroid中对JSON的处理方法一&#xff1a;org.json.JSONObject方法二&#xff1a;GSON(toJson,fromJson)RetrofitRESTful API 对REST的解释 REST描述的是在网络中客户端和服务端…

编写和调试Shader程序(1)

编写和调试Shader程序&#xff08;1&#xff09;DirectX EffectEditJohnsonFeng常用的Shader编写程序有ATI Render Monkey和NVIDIA FX Composer,另外还有DirectX自带的EffectEdit。这几款工具都比较容易上手&#xff0c;本文先介绍DirectX的EffectEdit。EffectEdit是DirectX9.0…

(24):(行为型模式) Visitor 访问者模式

[所有分类] 转载于:https://www.cnblogs.com/hyp5490-/p/3891411.html

二十二、新人成才之路《做人七项原则 做一个节俭惜福的人》

人的福报有先天福报和后天福报。先天福报是从出生时&#xff0c;就注定的。你是个有福的人&#xff0c; 还是个福气少的人。比如出身富贵之家的孩子&#xff0c;可能天生福报较大。出身贫穷人家的孩子&#xff0c; 天生福报可能就较小。也有贫苦孩子通过奋斗努力&#xff0c;最…

代码版本控制工具Concurrent Versions System(CVS)的三种用配置库更新本地工作目录文件的方法

(1)选中文件右键->team->update (2)选中文件右键->replace with->latest from HEAD (3)选中文件右键->team->synchronize with repository 注&#xff1a;第三种方法会以可视化的方式让用户对比本地工作目录和远程配置库中文件的区别 可以用当中的copy方法来…

SPOJ AMR10I Dividing Stones --DFS

题意&#xff1a;给n个石头&#xff0c;分成一些部分&#xff08;最多n部分&#xff0c;随便分&#xff09;&#xff0c;问分完后每部分的数量的乘积有多少种情况。 分析&#xff1a;可以看出&#xff0c;其实每个乘积都可以分解为素数的乘积&#xff0c;比如乘积为4&#xff0…

Cookie注入是怎样产生的

Cookie注入是怎样产生的 现在很多网站都加了防注入系统代码&#xff0c;你输入注入语句将无法注入~~感觉这样的防注入系统不错&#xff0c;但防注入系统没有注意到 Cookies 的问题&#xff01;所以就有了Cookies注入~~我们来研究一下怎样情况下才会有Cookies注入!如果你学过ASP…

阿里最强热修复:Sophix 超高速集成与踩坑

超高速集成 public class SophixStubApplication extends SophixApplication {private final String TAG "Sophix";// 此处SophixEntry应指定真正的Application&#xff0c;并且保证RealApplicationStub类名不被混淆。KeepSophixEntry(GowildApplication.class)stat…

安卓开发|自定义监听器的三个步骤

首先&#xff0c;要有一个实现View.OnClickListener接口的类这个类要重写onClick(View v)这个方法&#xff0c;里面加入想要触发的事件将监听器绑定在要监听的组件上&#xff0c;例如 holder.verticalLinear.setOnClickListener(MyAdapter.this);setOnClickListener的参数即为…

自己用C#写一个采集器、蜘蛛(zz)

效果图&#xff1a; 代码如下&#xff1a; usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net;usingSystem.Web;usingSystem.IO;usingSystem.Collections;usingSystem.Text.RegularExpressions;namespacechinaz { classProgram { …

DataPipeline |《Apache Kafka实战》作者胡夕:Apache Kafka监控与调优

胡夕&#xff0c;《Apache Kafka实战》作者&#xff0c;北航计算机硕士毕业&#xff0c;现任某互金公司计算平台总监&#xff0c;曾就职于IBM、搜狗、微博等公司。国内活跃的Kafka代码贡献者。 前言虽然目前Apache Kafka已经全面进化成一个流处理平台&#xff0c;但大多数的用户…

windows程序移植linux

1&#xff0c;路径名统一用正斜杠“/”。&#xff08;windows下正反斜杠都识别&#xff0c;linux只认正斜杠。&#xff09; 2&#xff0c;统一使用UTF-8格式编码。 vim中无法保存汉字时&#xff0c;可输入下列命令&#xff1a; &#xff1a;set fileencodingprc &#xff1a;se…

完美解决方案 | 完全卸载任何版本office残余文件

采用微软官方给的卸载文件&#xff0c;注意需要能够科学上网 然后再用拼夕夕的安装包重装就能装上&#xff0c;不会提示以下 折腾好久&#xff0c;这次亲测有效 参考文章

Struts2的拦截器只允许有权限用户访问action

1、定义拦截器,继承MethodFilterInterceptor package com.life.stuts.interceptor;import java.util.Map;import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;/*** 如果不是login的adction&#xff0c;使…

ZABBIX(八) Zabbix 通知媒介

一、zabbix报警媒介介绍zabbix触发器到了要发送通知的情况下&#xff0c;需要一个中间介质来接收并传递消息给运维。以前使用的是nagios&#xff0c;通常用脚本发送邮件或者发送飞信来达到报警。在此脚本就是一个媒介了。1、E-mail使用sendmail发送邮件&#xff0c;从这边出去的…

Office Live for Small Business--开启您创业的大门

在我印象中&#xff0c;有一段时间了&#xff0c;我一个人或是和一些朋友在一起聊天的时候&#xff0c;脑子里总是会不由自主地琢磨一个问题&#xff0c;我想这个问题或许也常常困扰很多朋友&#xff0c;那就是“房子首付从哪里来”。我不是一个习惯于伸手跟父母要钱的人&#…

webView加载不出网页的一种可能情况

我的webview的Java代码里有以下内容 Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.webview);savedInstanceState getIntent().getExtras();myurl savedInstanceState.getString("url&qu…