干货转载——https://www.cnblogs.com/wisewrong/archive/2018/12/28/10186611.html

全是知识点呐

赶紧记下来啊

一、调整项目结构

首先用 vue-cli 创建一个 default 项目

// 顺便安利一篇文章《Vue 爬坑之路(十二)—— vue-cli 3.x 搭建项目》

当前的项目目录是这样的:

首先需要创建一个 packages 目录,用来存放组件

然后将 src 目录改为 examples 用作示例

二、修改配置

启动项目的时候,默认入口文件是 src/main.js

将 src 目录改为 examples 之后,就需要重新配置入口文件

在根目录下创建一个 vue.config.js 文件

  1. // vue.config.js
  2.  
  3. module.exports = {
  4. // 将 examples 目录添加为新的页面
  5. pages: {
  6. index: {
  7. // page 的入口
  8. entry: 'examples/main.js',
  9. // 模板来源
  10. template: 'public/index.html',
  11. // 输出文件名
  12. filename: 'index.html'
  13. }
  14. }
  15. }

完成这一步之后就可以正常启动项目了

vue-cli 3.x  提供了构建库的命令,所以这里不需要再为 packages 目录配置 webpack

三、开发组件

之前已经创建了一个 packages 目录,用来存放组件

该目录下存放每个组件单独的开发目录,和一个 index.js 整合所有组件,并对外导出

每个组件都应该归类于单独的目录下,包含其组件源码目录 src,和 index.js 便于外部引用

这里以 textarea 组件为例,完整的 packages 目录结构如下:

textarea/src/main.vue 是组件的开发文件,具体代码这里就不展示了

需要注意的是,组件必须声明 name,这个 name 就是组件的标签

textarea/index.js 用于导出单个组件,如果要做按需引入,也需要在这里配置

  1. // packages/textarea/index.js
  2.  
  3. // 导入组件,组件必须声明 name
  4. import Textarea from './src/main.vue'
  5.  
  6. // 为组件添加 install 方法,用于按需引入
  7. Textarea.install = function (Vue) {
  8. Vue.component(Textarea.name, Textarea)
  9. }
  10.  
  11. export default Textarea

四、整合并导出组件

编辑 packages/index.js 文件,实现组件的全局注册

  1. // packages / index.js
  2.  
  3. // 导入单个组件
  4. import Textarea from './textarea/index'
  5.  
  6. // 以数组的结构保存组件,便于遍历
  7. const components = [
  8. Textarea
  9. ]
  10.  
  11. // 定义 install 方法
  12. const install = function (Vue) {
  13. if (install.installed) return
  14. install.installed = true
  15. // 遍历并注册全局组件
  16. components.map(component => {
  17. Vue.component(component.name, component)
  18. })
  19. }
  20.  
  21. if (typeof window !== 'undefined' && window.Vue) {
  22. install(window.Vue)
  23. }
  24.  
  25. export default {
  26. // 导出的对象必须具备一个 install 方法
  27. install,
  28. // 组件列表
  29. ...components
  30. }

到这里组件就已经开发完毕

可以在 examples/main.js 中引入该组件

  1. import TagTextarea from '../packages/index'
  2. Vue.use(TagTextarea)

然后就能直接使用刚才开发的 textarea 组件

组件的标签就是组件内定义的的 name

这时候可以 npm run serve 启动项目,测试一下组件是否有 bug

// 启动前需要确保已经在 vue.config.js 中添加了新入口 examples/main.js

五、打包组件

vue-cli 3.x 提供了一个库文件打包命令

主要需要四个参数:

1. target: 默认为构建应用,改为 lib 即可启用构建库模式

2. name: 输出文件名

3. dest: 输出目录,默认为 dist,这里我们改为 lib

4. entry: 入口文件路径,默认为 src/App.vue,这里改为 packages/index.js

基于此,在 package.json 里的 scripts 添加一个 lib 命令

  1. // pageage.json
  2.  
  3. {
  4. "scripts": {
  5. "lib": "vue-cli-service build --target lib --name tag-textarea --dest lib packages/index.js"
  6. }
  7. }

然后执行 npm run lib 命令,编译组件

六、准备发布

首先需要在 package.json 添加组件信息

name: 包名,该名不能和已有的名称冲突;

version: 版本号,不能和历史版本号相同;

description: 简介;

main: 入口文件,应指向编译后的包文件;

keyword:关键字,以空格分割;

author:作者;

private:是否私有,需要修改为 false 才能发布到 npm;

license:开源协议。

然后创建 .npmignore 文件,设置忽略文件

该文件的语法和 .gitignore 的语法一样,设置发布到 npm 时忽略哪些目录或文件

  1. .DS_Store
  2. node_modules/
  3. examples/
  4. packages/
  5. public/
  6. vue.config.js
  7. babel.config.js
  8. *.map
  9. *.html
  10.  
  11. # local env files
  12. .env.local
  13. .env.*.local
  14.  
  15. # Log files
  16. npm-debug.log*
  17. yarn-debug.log*
  18. yarn-error.log*
  19.  
  20. # Editor directories and files
  21. .idea
  22. .vscode
  23. *.suo
  24. *.ntvs*
  25. *.njsproj
  26. *.sln
  27. *.sw*

七、发布到 npm

如果以前改过 npm 的镜像地址,比如使用了淘宝镜像,就先改回来

  1. npm config set registry http://registry.npmjs.org

如果没有 npm 账户,可以通过 npm adduser 命令创建一个账户,或者到 npm 官网注册

如果在官网注册的账户,或者以前就有账户,就使用 npm login 命令登录

具体流程可以参考官方文档(谷歌浏览器->翻译中文)

在发布之前,一定要确保组件已经编译完毕,而且 package.json 中的入口文件(main)的路径正确

一切就绪,发布组件:

  1. npm publish

emmmmmm....

到这里就该结束了

vue-cli 3.x 自定义插件并发布到 npm的更多相关文章

  1. vue封装第三方插件并发布到npm

    前言 写此文前特意google了一下,因为有较详细的开发教程我再写意义不大,有把插件封装成组件的教程,有把自己的组件封住成插件的教程,本文主要说明如何把第三方的插件封装成vue插件,简化配置,一键安装 ...

  2. vue封装插件并发布到npm上

    vue封装插件并发布到npm上 项目初始化 首先,要创建项目,封装vue的插件用webpack-simple很合适,vue init webpack-simple 项目名称此命令创建我们的项目的目录, ...

  3. 开发vue插件并发布到npm包管理工具的流程

    1-10是开发流程,后面的是发布流程 1. 在Git里面…新建项目   2. 克隆项目到本地用来开发 git clone https://github.com/***/vue-prevent-brow ...

  4. vue-cli 3.x 开发插件并发布到 npm

    为了摆脱咸鱼的身份,我给自己定了一个开源项目的目标 于是抽空写了一个 textarea,打算发布到 npm 的时候却遇到了问题 之前用 vue-cli 2.x 的时候,打包配置项非常透明,可以很容易的 ...

  5. 80行代码教你写一个Webpack插件并发布到npm

    1. 前言 最近在学习 Webpack 相关的原理,以前只知道 Webpack 的配置方法,但并不知道其内部流程,经过一轮的学习,感觉获益良多,为了巩固学习的内容,我决定尝试自己动手写一个插件. 这个 ...

  6. [Vue CLI 3] 配置 webpack-bundle-analyzer 插件

    首先还是简单介绍一下 webpack-bundle-analyzer 是做什么的: Visualize size of webpack output files with an interactive ...

  7. Vue CLI 3 如何自定义 js 的文件名

    参考链接:https://blog.csdn.net/weixin_33979363/article/details/88742342

  8. 关于vue cli 使用iview 自定义主题遇到的坑

    定制主题,这里讲变量覆盖 当你老老实实的把上面文档中的代码一一复制粘贴到项目文件中时,发现了还没装less,所以你就 npm install less –savenpm install less-lo ...

  9. 封装插件并发布到npm的历程

    1.封装插件 2.使用webpack打包的时候发生了很多问题 3.过程很反复 4.但最终还是发布成功了

随机推荐

  1. 32 (OC)* keyChain的本质

    1:它是一个sqlite数据库,其保存的所有数据都是加密过的. 2:Keychain是加密规则(key)的集合.每个规则必须含有以下三个要素:认证算法.认证密钥(加密字符串).规则的时间. 3:key ...

  2. LayUI 上传IE11上传格式错误之后, layer.load(1)的动画一直在,没有关闭(仅限IE11)

    这个问题,测试反馈的时候,有丝丝的不相信,毕竟layui大家都是那么用的,结果后来用最简单的测试,发现确实会出现动画一直在的情况,如下: 上网搜索,也没发现一些有效的信息,最后就是自己读upload. ...

  3. 细谈Redis五大数据类型

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上一篇文章有提到,Redis中使用最频繁的有5种数据类型:String.List.Hash.Set.SortS ...

  4. js之捕捉冒泡和事件委托

     以下为转载内容 一.事件流(捕获,冒泡)   事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体 ...

  5. Java的EOF标识?

     这篇是关于JAVA中EOF标识的讲解,之前在工作上碰到过一个问题,有人问过,不能通过判断EOF来知道文件有没有读取完毕吗?其实,还真不能.  直接从JDK接口文档入手,以FileInputStrea ...

  6. Redis数据库之经典考核习题

    Redis数据库之经典考核习题-题目 一.Redis数据库安装 要求每个学生首先对数据库进行安装,并最终能使用客产端进行数据库的登录. 二.数据库启动文件参数调整 假设数据库服务器默认端口6379已经 ...

  7. hbase、pig、hive配置与应用

    ------------------HBASE---------- [root@iClient~]#sudo yum install hbase #iClient安装Hbase客户端 [root@cM ...

  8. CentOS6.x环境通过yum命令在线安装或重装zookeeper-server

    一.环境描述: 在CentOS6.x系统环境下,使用yum命令的形式安装zookeeper-server,由于我这里是重新安装zookeeper-server,所以在正式开始之前我需要将原本的zook ...

  9. logcat粗略了解(一)

    Logcat Logcat介绍:logcat是android的一个命令行工具,用于的到程序的log信息 Logcat命令格式: [adb] logcat [<option>]…[<f ...

  10. Flask基础(13)-->Flask扩展Flask-Script

    Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...