首页 > 其他分享 >『手撕Vue-CLI』处理不同指令

『手撕Vue-CLI』处理不同指令

时间:2024-05-20 19:07:36浏览次数:18  
标签:文件 Vue CLI js 指令 参数 path 处理函数

前言

在上一篇『手撕Vue-CLI』添加自定义指令中,已经实现了自定义指令的添加,但是指令还是比较简单的,只是简单的打印一句话,那么在实际运用场景中,可能会有更多的需求,比如可能需要在指令中传递参数,或者需要在指令中进行一些复杂的操作,那么这个时候我们就需要对指令进行处理了。

创建指令处理文件

在上一篇『手撕Vue-CLI』添加自定义指令中,添加了一个 create 指令与 add 指令, 先来处理一下 create 指令,为了更好的处理指令,我单独为每一个指令创建了一个文件,这样更加清晰。

bin 目录下创建一个 create.js 文件,用于处理 create 指令,create.js 文件内容如下:

module.exports = () => {
    console.log('create');
}

bin 目录下创建一个 add.js 文件,用于处理 add 指令,add.js 文件内容如下:

module.exports = () => {
    console.log('add');
}

修改指令处理文件

接下来需要修改 bin/index.js 文件,之前是在 action 回调中根据 key 来判断指令,然后处理指令,之前只是简简单单的打印出来指令所对应的 description,现在需要根据指令来引入对应的处理文件,然后执行对应的处理函数。

这里会遇到几个问题,首先是如何引入对应的处理文件,其次是如何执行对应的处理函数。

首先来解决如何引入对应的处理文件,这里可以使用 require 函数来引入对应的处理文件,然后使用 module.exports 来导出处理函数这一步已经在处理函数文件中已经编写好了,这样就可以在 index.js 中引入对应的处理文件,然后执行对应的处理函数。

上面我提到了使用 require 来引入对应的处理文件这里有存在一个问题路径问题,这里可以用 __dirname 获取当前文件所在的目录:

然后配合 path 模块来拼接路径,这样就可以解决路径问题了,在 path 中有一个 resolve 这个函数可以接受多个参数,每个参数都会被视为路径的一部分,并且会从右到左依次进行解析。最终返回的是这些路径片段拼接后的绝对路径。

随后我们的代码就可以改写成如下:

require(path.resolve(__dirname, key))();

首先利用 _dirname 获取当前文件所在的目录,然后使用 path.resolve__dirname 与 key 拼接成一个绝对路径,key 就是指令名称,然后使用 require 引入对应的处理文件,最后执行对应的处理函数。

我们的处理文件是通过 module.exports 导出的,所以可以直接调用引入的文件,然后执行对应的处理函数。

其它的代码没动,还有就是我这里使用到了 path 模块,所以需要在 index.js 文件中引入 path 模块:

const path = require('path');

__dirname 在我之前的 Node.js 系列文章中有提到过,这里就不再赘述了,如果不了解的可以去看一下之前的文章。

看到这,我们是不是已经有能力去处理不同的指令了,但是还有问题需要解决,那就是如何传递参数。

传递参数

在实际这些指令的时候,指令后面可能会跟一些参数,比如 create 指令后面可能会跟一个项目名称,add 指令后面可能会跟一个组件名称,那么这个时候我们就需要传递参数了。

在 Node.js 中,可以通过 process.argv 来获取命令行参数,process.argv 是一个包含命令行参数的数组,第一个元素是 Node.js 的可执行文件路径,第二个元素是当前执行的 JavaScript 文件路径,从第三个元素开始,依次是命令行传入的参数。

所以从这就可以得出,可以通过 process.argv 来获取到指令后面的参数,然后传递给对应的处理函数,在上面说了从第三个元素开始,依次是命令行传入的参数,所以我们可以通过 process.argv.slice(3) 来获取到指令后面的参数。

先来打印一下看看:

很 ok,结果正是我想要的,那么接下来就可以将这些参数传递给对应的处理函数了。

改写一下 index.js 文件:

require(path.resolve(__dirname, key))(...process.argv.slice(3));

就改一行代码,将 require(path.resolve(__dirname, key))() 改成 require(path.resolve(__dirname, key))(...process.argv.slice(3));,利用 ... 来展开数组,将数组中的元素传递给函数。

接下来要改的就是在处理函数中接收参数了,比如在 create.js 中接收参数,create 只需要一个参数就是项目名称,所以只需要一个参数,那么可以这样改写:

module.exports = (projectName) => {
    console.log('create', projectName);
}

add.js 中接收参数,add 需要两个参数:

module.exports = (a, b) => {
    console.log('add', a, b);
}

这样就可以在处理函数中接收参数了,然后在处理函数中就可以根据参数来进行一些操作了。

最后来测试一下:

标签:文件,Vue,CLI,js,指令,参数,path,处理函数
From: https://www.cnblogs.com/BNTang/p/18202637

相关文章

  • VUE,HbuilderX开发H5页面,配置调试,部署以及JWT,Token。调用本机netcore接口
    花了一周时间,测试了各种方式。对于VUE开发H5页面,然后部署到Nginx服务。再调用本地的HTTPS接口。1、本地开发及使用IE或Chrome进行开发调试,并调用本地接口同步开发。本地Netcore,开发按原有方式进行。Hbuilderx,开发并调用本地接口。设置时,不要使用Https进行。直接用http即可。Hbuild......
  • vue3+ts 指令拖拽div案例
    <template><divclass="box"v-move><divclass="header"></div><div>内容</div></div></template><scriptsetuplang="ts">import{ref,Directive,DirectiveBinding}......
  • EasyUEFI、Bootice、Bcdedit和EfiVarCLI都是用于管理计算机启动项和UEFI设置的工具,但
    EasyUEFI、Bootice、Bcdedit和EfiVarCLI都是用于管理计算机启动项和UEFI设置的工具,但它们在功能和用途上有一些区别:EasyUEFI:EasyUEFI是一个用户友好的图形界面工具,主要用于管理UEFI引导项,在Windows操作系统下操作更加方便。EasyUEFI提供了添加、删除、编辑UEFI引导项的......
  • fullcalendar-vue3插件实现时间资源图
    用的vue3+最新版本:官网链接:https://fullcalendar.io/demos效果如图:x轴为人员,y轴为当日的时间段:  1.安装引入npminstall--save@fullcalendar/core@fullcalendar/resource@fullcalendar/resource-timegrid package.json 2.附上代码<script>import{defin......
  • vue之移动端的页面在返回时记住操作的位置,提供滑动动画效果
    1、在main.js中添加importctpRouterfrom'@/ares-ui-extend/CtpRouter';Vue.use(ctpRouter,router);2、添加相应的代码在src的目录下添加 ares-ui-extend的文件夹 ares-ui-extend文件夹的下面添加CtpRouter,CtpRouter下面为: ctp-router.css内容为:/*动画样式*......
  • PLSQL Developer Oracleclient
    PLSQLDeveloper配置Oracleclient将oracleclient解压到指定目录配置环境变更PATHD:\ProgramFiles\DataBase\oracleclientTNS_ADMIND:\ProgramFiles\DataBase\oracleclient\network\adminNLS_LANGSIMPLIFIEDCHINESE_CHINA.ZHS16GBK修改network/admin/tnsnam......
  • 阿里云 nginx 部署vue项目的代码
    在开发完成之后需要部署我们的网站项目,那么步骤如下:打包vue项目,使用npmrunbuild将vue项目打包成dist的文件夹下面,然后将dist文件夹压缩方便上传到服务器将dist.zip上传到阿里云的文件夹下面,默认情况是上传到/var/www下面,在不配置nginx的情况下,默认情况下的放项目的地方将上......
  • clickhouse表结构导出为
     查看代码#!/bin/bashOUTDIR=/opt/backup/#获取所有数据库并保存到文件中clickhouse-client--userdefault--password123456-q"SHOWDATABASES">/opt/backup/db.txt#读取数据库文件whileread-rdb;do#排除system和INFORMATION_SCHEMA数据库de......
  • 基于 Spring Boot3、Vue3!这套小说系统开源了...
    大家好,我是Java陈序员。今天,给大家介绍一个基于SpringBoot3、Vue3前后端分离的小说项目,集成了主流的技术栈,可供学习使用!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍novel——一套基于SpringBoot3+Vue3开发......
  • 终于搞懂了!原来 Vue 3 的 generate 是这样生成 render 函数的
    前言在之前的面试官:来说说vue3是怎么处理内置的v-for、v-model等指令?文章中讲了transform阶段处理完v-for、v-model等指令后,会生成一棵javascriptAST抽象语法树。这篇文章我们来接着讲generate阶段是如何根据这棵javascriptAST抽象语法树生成render函数字符串的,本文中使用的v......