返回顶部
首页 > 资讯 > 前端开发 > JavaScript >element用脚本自动化构建新组件的实现示例
  • 326
分享到

element用脚本自动化构建新组件的实现示例

2024-04-02 19:04:59 326人浏览 独家记忆
摘要

目录背景element-ui的自动化构建是怎么做的makefilenew.jsfile-save引用资源文件的修改fs.createWriteStream总结背景 在公司的项目中,

背景

在公司的项目中,每次碰到新需求的时候,你是不是都还在用新建页面 => 往页面中添加内容,如Vue模板 => 添加路由。难道不觉得麻烦吗?如果是的话,不妨试试自动化构建吧,太香了~

element-ui的自动化构建是怎么做的

开源项目中,特别是UI库的开发,有太多人协同,每个人的code习惯也都不一样。并且UI库中每个组件都还会涉及到多语言、单元测试、路由、组件的readme.md文档等文件。所以如果每次都慢慢去创建这些则太麻烦了,并且多人修改公共文件如路由文件会产生非常多的冲突。所以在开源项目中都会有非常多的脚本,去自动化生成某些文件。

makefile

在element-ui项目根目录有个makefile文件,每条命令的作用都在注释中。windows用户要使用make命令执行脚本得下载。Mac用户不需要。


@# 默认的#注释会在日志中输出,@#则不会
@# .PHONY的作用: 在下方的脚本命令中忽略检查是否与dist、test目录冲突,也就是说无论如何都会去执行命令
.PHONY: dist test

@# 执行make命令时,默认执行help脚本
default: help

@# 执行`make build-theme`就是执行`npm run build:theme`脚本,
@# : 冒号前面为执行的命令,冒号后面第二行第一个应该为一个tab,tab之后跟脚本命令
@# 也就是说下面的为 'tab+npm npm build: theme'
# build all theme
@# 上面的build theme注释可以查看下方的截图,会在日志中输出
build-theme: 
 npm run build:theme
install:
 npm install
dev:
 npm run dev
@# $()为使用函数
@# $@ 为当前命令本身比如 'make new',$@ 就是 new
@# MAKECMDGoALS 特殊变量,该变量记录了命令行参数指定的目标列表,也就是说使用这个变量,我们可以得到命令行的参数
@# 比如我们在创建新组件时,使用脚本`make new wailen` MAKECMDGOALS 就等于 wailen
@# filter-out 反过滤函数,过滤掉 $(MAKECMDGOALS) 中所有含有 $@ 的内容
@# 结合new.js的内容,下方脚本的意思也就是创建新组建,传入组件名称,组件名称不得为new,如果组件名称取为new,可以查看下方截图
new:
 node build/bin/new.js $(filter-out $@,$(MAKECMDGOALS))
@# 省略了一些脚本,感兴趣的可以自行查看源码
help:
 @echo "   \033[35mmake\033[0m \033[1m命令使用说明\033[0m"
 @echo "   \033[35mmake install\033[0m\t\033[0m\t\033[0m\t\033[0m\t---  安装依赖"
 @echo "   \033[35mmake new <component-name> [中文名]\033[0m\t---  创建新组件 package. 例如 'make new button 按钮'"
 @echo "   \033[35mmake dev\033[0m\t\033[0m\t\033[0m\t\033[0m\t---  开发模式"
 @echo "   \033[35mmake dist\033[0m\t\033[0m\t\033[0m\t\033[0m\t---  编译项目,生成目标文件"
 @echo "   \033[35mmake deploy\033[0m\t\033[0m\t\033[0m\t\033[0m\t---  部署 demo"
 @echo "   \033[35mmake pub\033[0m\t\033[0m\t\033[0m\t\033[0m\t---  发布到 npm 上"
 @echo "   \033[35mmake new-lang <lang>\033[0m\t\033[0m\t\033[0m\t---  为网站添加新语言. 例如 'make new-lang fr'"

# 注释输出

过滤new关键字,当传入参数为new时,过滤掉

当然,如果不想使用make直接执行node脚本即可,比如make new 组件名 等同于 node build/bin/new.js 组件名

new.js

new.js为自动化的核心文件。我们先思考一下,创建组件文件无非就是两个步骤

  • 创建文件
  • 添加内容

file-save

主要是通过file-save这个包创建文件并添加内容。先来看看api


const fileSave = require('file-save');
const content = "const fs = require('fs');"
const callback = () => { console.log('脚本执行') }
fileSave('文件路径')
   .write('文件内容比如上面的content', 'utf8', callback) // 内容写入成功会触发回调
   .write('继续添加content','utf8')
   .end('\n') // 文件操作结束,以空白行结束

如此便会生成如下文件

更多的文档可以查看file-save

element-ui中就是先通过一个Files数组对象管理了需要创建的filename以及code content。

这样直接循环Files就能创建对应的文件了。


// 创建 package
// 组件生成的目录
const PackagePath = path.resolve(__dirname, '../../packages', componentname);
Files.forEach(file => {
  fileSave(path.join(PackagePath, file.filename))
    .write(file.content, 'utf8')
    .end('\n');
});

引用资源文件的修改

另外,一般创建了组件还需要修改相应需要引用组件的地方,比如路由配置文件等。我们同样可以通过file-save去添加对应的路由。本身file-save会覆盖之前文件中的内容,也就是删除过后重新再次生成。所以如果是在原有基础上做增的操作的话,就需要获取到原有文件的内容,再在此基础上拼接新内容。我们可以这样做:


const fileSave = require('file-save');
const fs = require('fs');

const content = `const fileSave = require('file-save'); `
const oldCode = fs.readFileSync('./demo.js')
fileSave('demo.js')
  .write(oldCode+content, 'utf8')
  .end('\n')

也就是通过fs模块读取到文件的旧内容,再拼接即可。element-ui是这么做的:

fs.createWriteStream

file-save原理就是通过fs.createWriteStream这个api做了一层封装。
简单说下使用


const fs = require('fs')

//创建可写流 fs.WriteStream 类的对象,继承自 <stream.Writable>
const writer = fs.createWriteStream('createStream.js', { // 查找该文件,没有则创建
    //默认值为w, 通过调用writer.write方法写入数据的时候,会直接覆盖文件所有的内容,
    // 即会把文件之前的内容全部再删除,写入新的数据
    flags: 'w'
})


//写入数据到流
writer.write('这个文件的新内容')

file-save的源码内容可以查看下面的伪代码。


const savefs = {}
savefs._create_dir = function (fp, opts) {
  mkdirp.sync(fp, opts);
}
savefs.wstream = function (file) {
  var ws = fs.createWriteStream(file);
  this.writer = ws;
  return this;
}
savefs.write = function(chunk, encoding, cb) {
  ...
}

savefs.end = function(chunk, encoding, cb) {
  ...
}

savefs.finish = function(cb) {
  ...
}

savefs.error = function(cb) {
  ...
}
export { savefs }

当然,其实我们可以直接使用node的fs.writeFile这个API去创建文件,


fs.writeFile('文件路径','要写入的内容',['编码'],'回调函数');

可以发现参数跟file-save一样

总结

归根到底,自动化创建组件无非就是两个核心创建文件 添加内容。通过file-save这个包就可以实现这两个操作,然后我们再结合自身的业务,配置好生成文件的路径与内容,以及做好某些公共文件对新文件资源引用的修改即可。有没有觉得node写脚本,比写后端有意思多了~

到此这篇关于element用脚本自动化构建新组件的实现示例的文章就介绍到这了,更多相关element脚本自动化构建新组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: element用脚本自动化构建新组件的实现示例

本文链接: https://lsjlt.com/news/160653.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • element用脚本自动化构建新组件的实现示例
    目录背景element-ui的自动化构建是怎么做的makefilenew.jsfile-save引用资源文件的修改fs.createWriteStream总结背景 在公司的项目中,...
    99+
    2024-04-02
  • element怎么用脚本自动化构建新组件
    这篇文章主要为大家展示了“element怎么用脚本自动化构建新组件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“element怎么用脚本自动化构建新组件”这篇文章吧。element-ui的自动化...
    99+
    2023-06-22
  • shell脚本自动化的示例分析
    这篇文章主要介绍shell脚本自动化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!将某文件远程拷贝到指定ip机器上的指定目录下:./scp_file.sh /tmp/xx....
    99+
    2024-04-02
  • python自动化测试selenium执行js脚本实现示例
    WebDriver有2个方法执行Java Script脚本。 (1)同步执行:execute_script (2)异步执行:execute_async_script from s...
    99+
    2024-04-02
  • Python自动化办公脚本的示例分析
    小编给大家分享一下Python自动化办公脚本的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、自动化阅读网页新闻这个脚本能够实现从网页中抓取文本,然后自...
    99+
    2023-06-29
  • python实现自动抢课脚本的示例代码
    目录自动抢课脚本使用手册1.准备工作2.配合使用py脚本和xlsx文件3.auto_get_lesson_pic_recognize功能介绍4.坐标版本(不建议使用)5.代码自动抢课...
    99+
    2024-04-02
  • python 利用PyAutoGUI快速构建自动化操作脚本
    目录一、背景二、自动化的方案三、思路和知识点四、操作步骤4.1 初识 PyAutoGUI4.2 坐标系4.3 点击4.4 输入4.5 汉字输入4.6 集成起来五、数据源六、总结一、背景 大家好,我是安果! 我们经常...
    99+
    2022-06-02
    python PyAutoGUI python 自动化操作
  • seleniumIDE自动化测试脚本的实现
    目录selenium IDE是干什么的selenium IDE环境的安装selenium IDE的使用selenium IDE是干什么的 Selenium IDE   是一...
    99+
    2024-04-02
  • linux自动化交互脚本expect的示例分析
    这篇文章将为大家详细讲解有关linux自动化交互脚本expect的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基...
    99+
    2023-06-09
  • PHP Linux脚本操作实例:实现自动化部署
    近年来,随着软件行业的快速发展,部署工作在开发流程中变得愈发重要。为了提高效率,许多开发团队都开始采用自动化部署来简化繁琐的部署过程。在这其中,PHP语言在Linux环境下的脚本操作成为了一种常见的实现方式。本文将介绍如何使用PHP脚本在L...
    99+
    2023-10-21
    Linux PHP 自动化部署
  • 使用Gitee自动化部署python脚本的示例分析
    这篇文章将为大家详细讲解有关使用Gitee自动化部署python脚本的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前期准备1.1 安装环境安装python32、打开命令行安装selenium...
    99+
    2023-06-15
  • react自动化构建路由的实现
    目录序1.路由集中式2.文件目录3.创建CompileRouter4.使用CompileRouter5.嵌套路由处理6. require.context使用api总结7.扁平数据转换...
    99+
    2024-04-02
  • 从新建vue项目到引入组件Element的示例分析
    这篇文章主要介绍从新建vue项目到引入组件Element的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文介绍了从新建vue项目到引入组件Element以及Error wh...
    99+
    2024-04-02
  • shell 脚本自动搭建nfs服务的方法示例
    本文介绍了shell 脚本自动搭建nfs服务的方法示例,分享给大家,具体如下: #vim /sh/zidong_dajian_nfs_fuwu.sh #!/bin/bash #namoGtGtgDYYe:zidon...
    99+
    2022-06-04
    shell 自动搭建nfs shell 搭建nfs
  • mysql中如何实现自动化脚本安装的shell脚本
    这篇文章将为大家详细讲解有关mysql中如何实现自动化脚本安装的shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。脚本处理逻辑流程图    ...
    99+
    2024-04-02
  • Shell脚本实现监测文件变化的示例详解
    目录代码使用方法我最近在使用linux的过程中遇到,遇到这样一个需求:监测某个文件的创建,变动、删除,并记录文件的每一个版本。我在网上没有找到合适的脚本或工具,然后我就自己写了一个shell脚本实现这个需求。 代码 完整...
    99+
    2022-06-22
    Shell监测文件变化 Shell监测文件
  • Python实现自动添加脚本头信息的示例代码
    前言 每个人写脚本时的格式都会有所不同,有的会注明脚本本身的一些信息,有的则开门见山,这在小团队里其实没什么,基本别人做什么你也都知道,但如果放到大的团队就比较麻烦了,因为随着人数的增多,脚本成指数增长,如...
    99+
    2022-06-04
    示例 脚本 代码
  • Python实现自动化整理文件的示例代码
    目录自动化整理计算机文件1. 文件的自动分类2. 文件和文件夹的快速查找3. 自动清理重复文件4. 批量转换图片格式5. 按拍摄日期自动分类图片自动化整理计算机文件 通过Python...
    99+
    2024-04-02
  • Python自动化测试之登录脚本的实现
    目录环境准备1、安装selenium模块2、安装浏览器驱动器代码1、登录代码2、xpath定位元素标签环境准备 前提已经安装好python、pycharm,配置了对应的环境变量。 1...
    99+
    2023-02-23
    Python自动化登录 Python自动化测试登录
  • 6个实用的Python自动化脚本详解
    目录1、将 PDF 转换为音频文件2、从列表中播放随机音乐3、不再有书签了4、智能天气信息5、长网址变短网址6、清理下载文件夹每天你都可能会执行许多重复的任务,例如阅读 pdf、播放...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作