使用vue-cli3+rollup+plop搭建npm插件

【从零到一手撕脚手架 | 第四节】加速开发效率 使用plop生成开发模板 使用mock进行数据模拟 基础的脚手架已经搭建完毕,如果我们想快速生成几个基础的组件模板我们可以使用Plop或者使用文件写入实现。比如我们不想等后端同学的接口,可以直接使用mock模拟数据生成。 阅读详情

安装vue框架

运行以下命令来创建一个新项目:

vue create zys-npm-rollup-plop-program

cd zys-npm-rollup-plop-program

yarn run serve

安装rollup.js和依赖项

rollup.js是一个JavaScript的模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。这里开始安装相关的依赖项。

yarn add rollup rollup-plugin-vue rollup-plugin-css-only @rollup/plugin-node-resolve @rollup/plugin-alias @rollup/plugin-commonjs @rollup/plugin-babel @rollup/plugin-json -D

配置rollup

image.png

配置文件是一个ES6模块,它对外暴露一个对象,这个对象包含了一些Rollup需要的一些选项。通常,我们把这个配置文件叫做rollup.config.js,它通常位于项目的根目录.我这边将其放到build文件夹下面,方便后续模块管理。

// rollup.config.js

export default inputs.map((name) => ({
  input: path.resolve(__dirname, `../packages/${name.split('@pc-component/')[1]}/index.js`),
  output: [
    {
      format: 'es',
      file: getOutFile(name, 'es'),
      paths(id) {
        if (/^@pc-component/.test(id)) {
          if (noElPrefixFile.test(id)) return id.replace('@pc-component', '..');
          return id.replace('@pc-component/', '../op-');
        }
      },
    },
    {
      format: 'cjs',
      file: getOutFile(name, 'lib'),
      exports: 'named',
      paths(id) {
        if (/^@pc-component/.test(id)) {
          if (noElPrefixFile.test(id)) return id.replace('@pc-component', '..');
          return id.replace('@pc-component/', '../op-');
        }
      },
    },
  ],
 }));

通过rollup配置output参数可以定义打包出来的文件名称和数据格式。通过打包输出了两个文件夹分别是es和cjs,分别对应的是es6的Module和CommonJS两种模块。

在package.json添加脚本

"build:components": "rollup --config ./build/rollup.config.js",

通过执行rollup.config.js的脚本命令将指定的模块代码进行打包。

安装plop

yarn add plop -D

plop可以通过命令行去生成、处理文件模板代码等。通过配置模板,可以使得每个模块的目录结构相同,减少了粘贴复制的麻烦。通过一键生成模板实现自动化,大大的提高了开发效率。

配置plop

image.png

在根目录创建plopfile.js,plopfile 作为一个低级节点模块开始它的生命,它导出一个函数,该函数接受plop对象作为其第一个参数。该plop对象公开包含该setGenerator(name, config)函数的 plop api 对象。可通过plopfile 创建生成器的函数。当plop从该目录(或任何子目录)中的终端运行时,将显示这些生成器的列表。

// plopfile.js
module.exports = (plop) => {
  plop.setGenerator('start', {
    description: '将创建一个新的项目',
    prompts: [
      {
        type: 'input',
        name: 'name',
        message: '项目名称',
        default: 'demo',
      },
    ],
    actions: [
      {
        type: 'add',
        path: 'packages/{{name}}/__test__/index.js',
      },
      {
        type: 'add',
        path: 'packages/{{name}}/src/index.vue',
        templateFile: 'plop-templates/vue-template.vue.hbs',
      },
      {
        type: 'add',
        path: 'packages/{{name}}/index.js',
        templateFile: 'plop-templates/index-template.hbs',
      },
      {
        type: 'add',
        path: 'packages/{{name}}/package.json',
        templateFile: 'plop-templates/package-template.json.hbs',
      },
    ],
  });
};

配置hhs模板

在根目录创建plop-templates文件夹,里面可以编写对应的模板文件。模版文件作用为编写生成文件的模版内容,可自己根据项目需求进行定义。案例下面为vue模板:

// vue-template.vue.hbs
<template>
  <div>{{name}}</div>
</template>

<script>
export default {
  name: 'op-{{name}}'
}
</script>

<style scoped>
</style>

在package.json添加脚本

“plop”: “plop start”

通过运行npm run plop生成模板文件。

image.png

配置打包入口

在packages目录创建index文件夹,用于插件的入口。

// index.js
import * as components from './components';

export * from './components';
const install = (app) => {

  Object.keys(components).forEach((c) => {
    app.use(components[c]);
  });

};

export default { install };

在package.json添加脚本

“build-bundle”: “vue-cli-service build --target lib --name zys-compnonent ./packages/index/index.js”

通过vue-cli的打包脚本里面的--target可以指定当前项目是app或者是lib类型

打包项目

  • 将vue打包成lib

npm run build-bundle

  • 将某个组件通过rollup打包

npm run build:components

image.png

得到打包文件,可以将es目录的组件引入当前项目,进行测试组件是否可以正常引入。

<template>
  <div id="app">
    <OpModule />
  </div>
</template>

<script>
import OpModule from '../es/op-module/index'

export default {
  name: 'App',
  components: {
    OpModule
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

image.png

组件可以正常显示出来。

推送到npm仓库

npm publish

image.png

推送npm仓库成功。

从npm拉取插件

yarn add zys-npm-rollup-plop-program -S

  • 注册组件
// main.js
import Vue from 'vue'
import App from './App.vue'
import zysCompnonent from 'zys-npm-rollup-plop-program'
Vue.config.productionTip = false

// 拉取插件并且注册
Vue.use(zysCompnonent)

new Vue({
  render: h => h(App),
}).$mount('#app')

  • 使用组件
// App.vue
<template>
  <div id="app">
    <op-module />
  </div>
</template>

<script>
// import OpModule from '../es/op-module/index'

export default {
  name: 'App',
  // components: {
  //   OpModule
  // }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

  • 页面现在从npm拉取的插件组件

image.png

看的见的思考

  • 后续可以引入lerna进行分包管理,减少包与包之间的依赖程度

  • 目前是全局引入组成组件,后续可以考虑按需引入

PS:源码给贡献出来了,欢迎访问gitHub

【ComfyUI】Wan2.2 Animate 背景保留动作迁移视频生成 本文介绍了一个基于ComfyUI的高精度视频生成工作流"Wan2.2 Animate",该系统融合动作捕捉、图像拼接和LoRA加权等技术,能自动识别人脸并完成精准动作迁移,同时保持背景稳定。工作流采用模块化设计,包含输入提取、图像融合、模型加载等关键节点,核心模型Wan2.2-Animate-14B支持fp8精度与BlockSwap控制。流程分为图像输入、动作提取、多图合成等五个阶段,通过文本提示编码器和图像语义编码器实现语义驱动的动作生成,最终输出高质量视频,适用于虚拟形象驱动和 阅读详情

相关推荐

半导体物理-Si晶体生长方向<2>

Si(硅)晶体的生长方向是一个重要的概念,尤其在半导体工业中。这个概念涉及到晶体在生长过程中原子排列的方向,对晶体的性质和应用有重大影响。让我为您详细解释:理解Si晶体的生长方向对于半导体材料的研究和应用非常重要,它直接影响了最终器件的性能和制造工艺。在实际应用中,选择适当的生长方向可以优化器件性能,提高产品质量。

m0_37606066的博客 2995

plop的安装和基本使用

前端自动化构建工具—Plop的安装和基本使用,用于自动化创建重复类型文件

m0_58403721的博客 1123

MT4量化交易入门:手把手教你用MQL4编写第一个外汇EA(含完整代码)

本文详细介绍了如何使用MQL4在MT4平台上编写第一个外汇EA,涵盖从开发环境配置到均线交叉策略实现的完整流程。通过手把手教学和完整代码示例,帮助量化交易新手快速掌握外汇自动化交易的核心技术,实现高效的MT4量化交易系统。

mmm90的博客 527

前端工程化之plop的使用

plop是什么?plop是一个轻量级的项目构建工具,api相当简单好用 明确需求 为什么需要plop?理论上讲,plop能做到的东西不算少,但主要也就是模板文件这样。对我来说,用来生成一些模块文件就行 安装plop 使用全局安装,不要局部,局部安装就是毒瘤。 npm install -g plop 在当前项目根目录新建文件plopfile.js 不需要专门新建一个项目,plop是非常轻量级的工具,api实打实简单,我们甚至不太需要接触到cli const reducerGenerator = req.

MyWay 610

哨兵一号burst数据的下载和处理

在Sentinel - 1数据处理领域,其基本流程起始于从(ASF)下载原始压缩文件。这些文件规模颇为可观,常规大小约4GB,而部分数据的原文件甚至已攀升至7GB,对存储空间提出了严苛要求。从影像构成来看,每景Sentinel - 1影像由三个干涉宽幅(IW)模式子带组成,每个IW一般包含9个脉冲串(burst)。然而,在实际研究中,我们所关注的研究区域往往仅占据其中寥寥几个burst。

kangkangluoluo的博客 1965

保姆级教程:用MATLAB搞定运动模糊图片修复(附完整代码与避坑指南)

本文提供了一份详细的MATLAB运动模糊图片修复教程,涵盖盲复原、图像复原等核心技术。通过傅里叶变换和Radon变换分析模糊参数,对比逆滤波、维纳滤波和Lucy-Richardson算法效果,并附完整代码与避坑指南,帮助用户实现专业级图像处理。

weixin_26765363的博客 230

vue3使用plop模板指令生成页面

这两个插件的目的是在指令中选择配置文件并把配置文件中的内容与命令行的内容合并保存在配置项中,配置文件:plop_template/config,主要是存放每个页面不同的数据内容,比如列表页中的查询参数、table中的显示项、接口名称等信息。vue-cli需要3.0版本,可以使用vue -V查看版本,node需要16版本及以上(node:v16.20.2,npm:8.19.4。根据第一步新建项目的时候选的yarn或者npm,来使用相应的指令安装(版本:^4.0.0)生成的detail.vue的文件内容。

qq_29184685的博客 1188

STM32Cubemx-H7-17-麦克纳姆轮驱动

我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。

m0_74211379的博客 1422

plop插件作用以及简单demo实现

plop插件作用以及简单demo实现Plop.js是一个简单的命令行界面工具,用于快速生成项目或代码片段。例如,当你在项目中需要频繁创建类似的文件结构或者模块时,可以通过定义好Plop的生成器(generator),然后通过命令行一键生成。命令时,会提示用户输入组件名称,然后根据这个名称生成对应的React组件(包括JS和CSS文件)。并按照提示输入组件名称,即可自动生成相应的React组件文件。,分别对应React组件的JS和CSS部分。在这个例子中,我们定义了一个名为。然后,在项目根目录下创建一个。

ivan5277的博客 680

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 添加getchar();代码块解决无法查找或打开PDB文件。 错误提示: “Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Pro...

m0_46523403的博客 6418

Qt基础之十九:进程与QProcess

进程就是一个程序的执行实例,也就是正在运行的程序。对操作系统来说,进程就是一个担当分配系统资源CPU时间、内存的实体。在Qt 中,我们使用QProcess来表示一个进程。这个类可以允许我们的应用程序启动一个新的外部程序,并且与这个程序进行通讯。当外部程序开始启动时,QProcess的状态为Starting;外部程序已经启动时,QProcess的状态为Running,并发送started()信号;当外部层序退出了,QProcess的状态为NotRunning(初始状态),并发送finished()信号。

草上爬的博客 1万+

前端黑科技篇章之plop,让你也拥有自己的脚手架

点击上方前端瓶子君,关注公众号回复算法,加入前端编程面试算法每日一题群来源:大码猴https://juejin.cn/post/6953981951569051685plop 是一款代码...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 863

使用GBIF获取生物多样性数据与GIS的结合

随着全球生物多样性的重要性日益凸显,越来越多的研究人员和保护机构开始利用地理信息系统(GIS)来分析和可视化生物多样性数据。GBIF(全球生物多样性信息设施)作为一个全球性的生物多样性数据库,提供了大量的物种分布和分类信息,为研究人员和保护工作者提供了宝贵的数据资源。本文将介绍如何使用GBIF API获取生物多样性数据,并将其与GIS技术相结合,以便更好地理解和研究生物多样性。利用GIS的强大功能,我们可以在地理空间上可视化物种分布、分析物种多样性的空间格局,并为保护生物多样性提供科学依据。

BnxBackend的博客 1763

使用plop插件在vue项目中技巧生成spring boot+jpa模块快速生成,一键一个模块

使用plop插件在vue项目中技巧生成spring boot+jpa模块 简述 plop可以根据hbs模板自动生成文件 spring boot一个模块 entity:实体类 dao:操作数据(这里我使用jpa) service:接口逻辑服务 controller:接口 根据自己的需求准备好模板,一键生成模板,高效率开发 1、vue准备工作 创建一个vue 脚手架项目并安装,配置plop 安装:npm install plop 修改vue配置:启动方式 package.json

qq_43536071的博客 552

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Rollup 打包 Vue3 组件

Rollup 打包 Vue3 组件库 安装 Rollup npm install --global rollup 安装 @vue-cli npm install -g @vue/cli 初始化一个 vue3 项目 vue create my-components-lib 在 src/components/ 创建一个测试组件 // MyComponent/index.ts import { App } from 'vue' import MyComponent from './MyComponent.v

m0_37602317的博客 4998

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

vue3 + vite常用工具

【代码】vue3 + vite常用工具

qq_42038997的博客 514

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

vue3 为项目增加plop-templates

官网https://plopjs.com/documentation/#installation 安装 npm install --save-dev plop 项目根目录创建plopfile.js, module.exports = function (plop) { // create your generators here plop.setGenerator('basics', { description: 'this is a skeleton plopfil..

weixin_40425322的博客 1071

whiteglass主题国际化配置:支持多语言博客的完整解决方案

whiteglass是一款极简且响应式的Jekyll主题,专为技术爱好者设计。本文将详细介绍如何为whiteglass主题配置国际化支持,让你的博客轻松实现多语言切换功能,满足全球读者的阅读需求。 ## 多语言配置基础:核心文件解析 whiteglass主题的国际化功能主要通过两个核心配置文件实现,它们分别负责语言文本定义和导航结构设置。 ### i18n.yml:多语言文本存储中心 语言

gitblog_00675的博客 882

Plop.js:一键生成代码模板,提升开发效率的利器

尤其是在前端开发中,开发者通常会创建大量的类似代码结构(如组件、服务模块、Redux actions 等),这些操作容易出错且耗时。Plop 的设计初衷就是以简单、灵活的方式,帮助开发者快速生成标准化的代码结构和文件,从而减少手动创建的工作量。它可以通过简单的模板定义和 CLI(命令行界面)交互,在项目中快速生成预定义的代码片段,从而提升开发效率。:操作是生成器的核心,它定义了在生成过程中如何处理用户的输入。在 Plop.js 中,生成器是一个集合,包含生成文件所需的模板、操作和用户输入提示。

王乐平 技术博客 1695

最前端|一文搞懂利用 plop 生成项目模板文件

细节:如果您希望添加的文件名是唯一的,则 templateFiles glob 位于的路径可以在它们的文件或文件夹名称中使用 handlebars 语法。您可以指定操作的类型(所有路径都基于 plopfile 的位置)和要使用的模板。plopfile api 是由 plop 对象公开的方法的集合,大部分工作都是由 setGenerator 完成的,当然也有很多其他有用的方法。提示:这里的模板内容,大家可以根据自己的项目需求,进行自定义设置 ,主要目的是方便项目整体复用。

在数字化道路无限探索 1994

plop的用法

每次写重复的代码是不是很浪费时间呢?接下来介绍一款用命令行就可以自动生成代码的工具。 plop的介绍 https://www.npmjs.com/package/plop 1.在项目中安装plop; npm install --save-dev plop 2.全局安装,这样就可以用plop命令了; npm install -g plop mac 使用 sudonpmins...

u010080803的博客 8479

用 Plop 加快项目相似代码生成

Plop是一个小型生成器框架,比如你要创建路由、控制器、组件等代码时,它就用得上了,而且你可以高度定制化它。

ygqygq2的IT博客 746

【前端知识】介绍一个简单好用的nodejs代码生成工具plop

通过合理使用 Plop,可以显著提升代码生成效率,保证项目结构的一致性,减少重复劳动。对于需要频繁创建相似代码结构的项目(如中后台管理系统),其生产力提升尤为明显。Plop 是一个基于 Node.js 的代码生成工具,它通过预定义的模板快速生成重复性的代码结构。

wendao76的专栏 1365

使用rollup | vue cli3(Webpack) 搭建属于自己的组件库,(按需加载,多入口打包...)

项目说明 最近准备抽离一些组件,所以就动手搭建了一个基础打包项目,该有的功能基本都有,功能如下: 按需引入: 支持使用babel-plugin-import插件按需引入,同时项目也支持多入口打包,可以单独引入某个入口打包文件,达到按需引入的目的. 多种方式打包: 支持rollup和vue cli3两种方式打包成库文件,rollup支持多种格式打包,只需要执行不同的npm命令即可 组件测试及...

ann的博客 4693

Vue3项目搭建 - Mock文件,plop文件,scripts文件,types文件

===============================scripts文件=================================================================plop文件==================================================================types文件=================================component 文件夹下: component.hbs。

Mark12346578的博客 451

前端工程化工具——plop的使用-生成模板页面

plop依据模板生成页面

Code Captain的专栏 858
上一篇: vite引入element-plus修改主题色报错
下一篇: 花了半天时间,缕清了vuex的源码实现
bigfatDone
博客等级 码龄8年 9粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值