vue-cli 3.x 开发插件并发布到 npm 及使用

1、创建默认项目

在这里插入图片描述

2、修改目录

首先需要创建一个 packages 目录,用来存放组件
然后将 src 目录改为 examples 用作示例
在这里插入图片描述
启动项目的时候,默认入口文件是 src/main.js
将 src 目录改为 examples 之后,就需要重新配置入口文件
在根目录下创建一个 vue.config.js 文件

// vue.config.js

module.exports = {
  // 将 examples 目录添加为新的页面
  pages: {
    index: {
      // page 的入口
      entry: 'examples/main.js',
      // 模板来源
      template: 'public/index.html',
      // 输出文件名
      filename: 'index.html'
    }
  }
}

完成这一步之后就可以正常启动项目了
vue-cli 3.x 提供了构建库的命令,所以这里不需要再为 packages 目录配置 webpack

3、开发组件

之前已经创建了一个 packages 目录,用来存放组件
该目录下存放每个组件单独的开发目录,和一个 index.js 整合所有组件,并对外导出
每个组件都应该归类于单独的目录下,包含其组件源码目录 src,和 index.js 便于外部引用
这里以 hello 组件为例,完整的 packages 目录结构如下:
在这里插入图片描述
需要注意的是,组件必须声明 name,这个 name 就是组件的标签

//Hello/index.vue
...组件内容
//Hello/index.js

// 导入封装的组件
import Hello from './index.vue'
// 为组件添加 install 方法,用于按需引入
Hello.install = function (Vue) {
    Vue.component(Hello.name, Hello)
}

export default Hello

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

// 导入单个组件
import Hello from './Hello/index'
// 以数组的结构保存组件,便于遍历
const components = [
    Hello
]
// 定义 install 方法
const install = function (Vue) {
    if (install.installed) return
    install.installed = true
    // 遍历并注册全局组件
    components.map(component => {
        Vue.component(component.name, component)
    })
}
if (typeof window !== 'undefined' && window.Vue) {
    install(window.Vue)
}
export default {
    // 导出的对象必须具备一个 install 方法
    install,
    // 组件列表
    ...components
}

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

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

import Vue from 'vue'
import App from './App.vue'
import Hello from './../packages/index' 
console.log(Hello,'000');
Vue.use(Hello)

Vue.config.productionTip = false

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

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

<Hello></Hello>

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

在这里插入图片描述
这时候可以 npm run serve 启动项目,测试一下组件是否有 bug

4、打包组件

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 命令
// pageage.json

{
  "scripts": {
    "lib": "vue-cli-service build --target lib --name tag-textarea --dest lib packages/index.js"
  }
}

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

5、准备发布

首先需要在 package.json 添加组件信息
name: 包名,该名不能和已有的名称冲突;
version: 版本号,不能和历史版本号相同;
description: 简介;
main: 入口文件,应指向编译后的包文件;
keyword:关键字,以空格分割;
author:作者;
private:是否私有,需要修改为 false 才能发布到 npm;
license:开源协议。
在这里插入图片描述
然后创建 .npmignore 文件,设置忽略文件
该文件的语法和 .gitignore 的语法一样,设置发布到 npm 时忽略哪些目录或文件

.DS_Store
node_modules/
examples/
packages/
public/
vue.config.js
babel.config.js
*.map
*.html

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

6、发布到 npm

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

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

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

如果在官网注册的账户,或者以前就有账户,就使用 npm login 命令登录
在发布之前,一定要确保组件已经编译完毕,而且 package.json 中的入口文件(main)的路径正确

一切就绪,发布组件:

npm publish //发布
npm unpublish 组件包名字 --force

7、使用

npm install --save 组件包名字
//main.js
import Vue from 'vue'
import App from './App.vue'
import Hello from 'ddmhello01'
Vue.use(Hello) 
Vue.config.productionTip = false

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

//.vue
//直接使用
<template>
  <div id="app">
    <Hello></Hello>
  </div>
</template>
<script>
export default {
  name: 'App',
  components: {
  }
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值