其实很早之前就做过,时间久了,就忘记了。这次复习,做个笔记
官方文档:https://cli.vuejs.org/zh/guide/build-targets.html#%E5%BA%93

创建组件项目
用脚手架创建一个普通项目,即可
然后,编写自己的代码

增加打包命令 并 修改项目入口启动文件
因为默认的npm run build打包,并不是构建插件类库模式
在packge.json中,增加如下脚本

 "main": "lib/custom-audio.umd.js",
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lib":"vue-cli-service build --target lib --name custom-audio --dest lib ./src/index.ts"
}

lib命令参数含义如下

  • target:默认为构建应用,改为lib即可启用构建库模式 // https://cli.vuejs.org/zh/guide/build-targets.html
  • name:输出文件名
  • dist:输出目录,默认为dist,可以修改我们改为lib
  • entry:入口文件路径,默认为src/App.vue,我们修改为src/lib/index.js

创建打包入口文件
npm run build的入口文件在src>main.js 我们将其改造为index.js
因为我用的是ts,所以在src下创建index.ts文件,代码如下

import CustomAudio from '@/components/custom-audio/index.vue'; //引入组件

// 定义install方法
const install:any = (Vue: any) => {
if (install.installed) {
return false;
}
// 遍历并注册组件 切勿写CustomAudio.name
Vue.component('CustomAudio', CustomAudio);
};
if (typeof window !== 'undefined' && window.Vue) {
install(window.Vue);
} // @ts-ignore
CustomAudio.install = install; export default CustomAudio;

打包发版
注册npm账号>进入目录登录npm login>打包npm run lib>发版npm publish
如果不出意外,此次操作就完事了
需要注意的是,这里可以不用将你的代码推送到git hub上,这个步骤是可有可无。
还有就是npm publish的时候,版本号要比上一个大,否则会失败

使用测试
创建一个新项目,yarn add custom-audio 或者 npm install custom-audio
然后在main.js引入注册

import CustomAudio from 'custom-audio'
Vue.use(CustomAudio)

最后在组件中直接使用

<CustomAudio msg="Welcome" />

遇到的问题
1、ts项目生产环境下,引入后,组件无法编译,仍然是自定义标签名(但是js项目或者ts的本地启动没问题)

原因是因为定义install组件的时候,注册的组件名字为compnents.name,编译过程中,组件名字会被压缩成别名,
解决办法,改成字符串,写死即可,完整入口文件如下
index.ts

import CustomAudio from '@/components/custom-audio/index.vue'; //引入组件

// 定义install方法
const install:any = (Vue: any) => {
if (install.installed) {
return false;
}
// 遍历并注册组件 切勿写CustomAudio.name
Vue.component('CustomAudio', CustomAudio);
};
if (typeof window !== 'undefined' && window.Vue) {
install(window.Vue);
} // @ts-ignore
CustomAudio.install = install; export default CustomAudio;

2、编译的时候,样式和图片丢失
引入使用,还需要像三方ui框架一样,单独引入css。
原因分析,默认情况下,css是单独打包的,不混淆在页面上,可以通过配置取消这一特性
图片丢失也是如此。图片的话,让其都变成base64就行了
所以完整的vue.config.js配置如下

module.exports = {
// 配置webpack,将图片转base64的限制放宽
chainWebpack: config => {
config.module
.rule('images')
.use('url-loader')
.loader('url-loader')
.tap(options => {
options.limit = 1024*1024
return options;
});
},
css: {
extract: false // 绑定css样式
}
};

推荐目录结构
examples文件夹: 组件库例子,npm run serve和build调用
对应的需要修改默认本地启动配置,
在vue.config.js增加如下代码

// 修改 src 目录 为 examples 目录
pages: {
index: {
entry: 'examples/main.ts',
template: 'public/index.html',
filename: 'index.html',
},
},

packges文件夹:你的核心组件代码,整个组件库源代码。当然还包括lib命令的的入口文件index.ts
对应的,你需要修改lib命令的入口文件地址,在packge.json中增加如下命令

"lib":"vue-cli-service build --target lib --name JieEcharts --dest lib ./packges/index.ts"

src文件夹:这个目录就不再需要了

lib文件夹: 组件库发行的代码,需要npm publish上传的npm的

dist文件夹:本地测试编译的文件夹,这个是默认的,不用动

.npmignore文件: 组件上传npm时候,忽略文件。比如我不需要上传源代码,配置如下即可

src/

推荐个好用的vue轮播插件:https://github.surmon.me/vue-awesome-swiper/
如果黑屏,引入cdn的css <link rel="stylesheet" href="https://github.surmon.me/_nuxt/4b3c342912bdfb0486a6.css">

vue开发组件并发包到npm的更多相关文章

  1. vue开发组件开发中的小技巧

    声明:以下随笔由博主自主编写,也有部分引用网友的,引用部分版权归原作者所有,其他博主原创部分禁止转载.复制全部或部分用以重新发布! vue递归组件事件阻止冒泡 其实这里主要还有递归组件的自定义事件不生 ...

  2. Vue开发组件之替代marquee标签,超出宽度文字横向滚动效果

    一.npm 安装 如果你想安装插件(自己写的)安装 install dependencies npm i marquee-components 使用 在main.js引入 import marquee ...

  3. 使用vue开发输入型组件更好的一种解决方式(子组件向父组件传值,基于2.2.0)

    (本人想封装一个带有input输入框的组件) 之前使用vue开发组件的时候,在遇到子组件向父组件传递值时我采用的方法是这样的: 比如子组件是一个输入框,父组件调用时需要获取到子组件输入的值,子组件通过 ...

  4. [转] Vue + Webpack 组件式开发(练习环境)

    前言 研究了下别人的 vue 多页面框架, 都是直接复制 package.json 文件,然后在本地 npm install 一下即可, 或者使用官网 vue-cli 工具生成一个项目, 觉得这样虽然 ...

  5. 手把手教你封装 Vue 组件,并使用 npm 发布

    Vue 开发插件 开发之前先看看官网的 开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: // 这里注意一下包的名字前缀是 ...

  6. vue.js组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎么实现,技术选型自然 ...

  7. 开发自己的react-native组件并发布到npm[转]

    原文链接:https://www.jianshu.com/p/091a68ea1ca7 写在前面 在做react-native开发的时候,我们经常会找到一些第三方组件,并且通过npm install的 ...

  8. 前端开发组件化设计vue,react,angular原则漫谈

    前端开发组件化设计vue,react,angular原则漫谈 https://www.toutiao.com/a6346443500179505410/?tt_from=weixin&utm_ ...

  9. 基于Vue开发的tab切换组件

    github地址:https://github.com/MengFangui/VueTabSwitch 1.index.html <!DOCTYPE html> <html lang ...

  10. 【06】Vue 之 组件化开发

    组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...

随机推荐

  1. STM32 调试小结

    图片1相关内容 确认芯片连接 使用keil软件打开一个STM32工程文档,编译,无报错 点击魔术棒,弹出配置界面"option for target XXXXX" 点击配置界面的D ...

  2. devops组件搭配选型

    名称 作用 备注 sentry 异常捕获系统 gitlab 代码仓库 jenkins 持续集成 open-falcon 监控系统 grafana 监控FE prometheus 监控系统 thanos ...

  3. C/S客户端渗透_Proxifier+burpsuite代理客户端http协议数据包+reGeorg构建HTTP隧道代理

    C/S客户端渗透_Proxifier+burpsuite代理客户端https协议数据包 一个月没发文章了实在太忙了,不过学习还是不能落下的,最近要做几个CS客户端的站,需要在终端装个北信源的煞笔内网安 ...

  4. Manus邀请码,Manus:科技圈新“炸点”,还是又一场狂欢?

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 想要邀请码获取方式往下看哟,同学~~~ 2025年3月6日,AI圈被一款名为Manus的产品 ...

  5. 35.2K star!双链笔记+知识图谱+本地优先,这款开源知识管理神器绝了!

    一款融合「双链笔记+知识图谱+本地优先」理念的开源知识管理工具,支持Markdown/Org-mode双格式,打造你的第二大脑! 项目介绍 "Logseq 是一个注重隐私.开源的知识管理平台 ...

  6. Java---switch...case中case可以匹配些什么

    switch-case语句 case 标签可以是 : •类型为 char.byte.short 或 int 的常量表达式. •枚举常量. •从 Java SE 7 开始,case 标签还可以是字符串字 ...

  7. ORA-24247:网络访问被访问控制列表(ACL)拒绝器

    我在oracle 存储过程中发送http请求, 报错如下: ORA-29273:HTTP请求失败 ORA-06512:在"SYS.UTL HTTP",line 1527 ORA-2 ...

  8. vue3 学习-初识体验-常见指令v-on和v-if

    继续来体验一波数据驱动结合绑定方法的实践案例. 这里以最常见的反转字符串为栗子来体验面向数据编程. v-on 用来绑定事件的, 然后将方法名写在 methods 中即可. <!DOCTYPE h ...

  9. WPF 使用GDI+提取图片主色调并生成Mica材质特效背景

    先看效果,在浅色模式下: 在深色模式下: P.S. 此算法只是尽可能地接近Windows Mica效果,并非实际实现:主色调提取算法只能确保在绝大多数情况下适用. 测试项目在Github上开源: Tw ...

  10. stylus - 新生代CSS预处理框架

    stylus是什么 Stylus 是一种 CSS 预处理器,它扩展了 CSS 的功能,使得编写样式变得更简洁和高效.Stylus 允许使用嵌套.变量.混入等编程功能,这些功能可以极大地提高开发效率和代 ...