发布属于自己的NPM组件UI包

3 篇文章 1 订阅
3 篇文章 0 订阅

在我们开发的过程中, 经常会用到一些比较常用的UI组件或工具类. 这一节, 我们来聊一聊如何通过npm来发布组件包. 让自己在开发的多个项目中, 使用通用的组件, 同时也能让别人也享受到您的成果.

新建项目

vue create workflow-bpmn-xy

src 目录修改为 examples 并删除所有文件, 仅保留 App.vuemain.js
新增 package 目录
在这里插入图片描述

编写组件

把编写好的组件放到在 package
在这里插入图片描述
index.js 文件中添加如下代码(可根据自己编写的组件自行更改)

import workflowBpmnModeler from './index.vue'

workflowBpmnModeler.install = (Vue) => {
  Vue.component(workflowBpmnModeler.name, workflowBpmnModeler)
}
if (typeof window !== 'undefined' && window.Vue) {
    install(window.Vue)
}
export default workflowBpmnModeler

或者, 当你有多个组件需要使用时

import workflowBpmnModeler from './index.vue'

// 把组件保存到一个数组中
const components = [
    workflowBpmnModeler
]

// 定义 install 方法
const install = function (Vue) {
    if (install.installed) return
    install.installed = true
    // 遍历组件列表并注册全局组件
    components.map(component => {
    	//component.name 此处使用到组件vue文件中的 name 属性
        Vue.component(component.name, component) 
    })
}
if (typeof window !== 'undefined' && window.Vue) {
    install(window.Vue)
}
export default {
    // 导出的对象必须具备一个 install 方法
    install,
    // 组件列表
    ...components
}

examples/App.vue 文件中调用

<template>
  <div id="app">
    <bpmn
          :options="options"
          @save="save"
          @showXML="showXML"
    >
    </bpmn>
  </div>
</template>

<script>
import Bpmn from '../package/index'

export default {
  name: 'App',
  components: {
    bpmn: Bpmn
  },
  data() {
    return {
      options: {}
    }
  },
  methods: {
    showXML(val) {
      console.log('showXML',val)
    },
    save(val) {
      console.log('save', val)
    }
  }
}
</script>

<style>
#app {
  height: 100%;
  width: 100%;
}
html, body {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
}
</style>

运行 npm run serve 测试组件是否正常使用

上传代码

1. 编辑 package.json 文件

{
  // 项目名称 (必填)
  "name": "workflow-bpmn-xy",
  "description": "基于 `vue` 和 `bpmn.io@7.0` ,实现 flowable 的 modeler 模型设计器",
  // 版本号 (必填)
  "version": "0.1.0",
  "author": "xyang",
  "license": "MIT",
  // 发布时必须设置为 false
  "private": false,
  // 指定打包主文件
  "main": "dist/workflow-bpmn-xy.umd.min.js",
  "scripts": {
    "serve": "vue-cli-service serve",
    "lint": "vue-cli-service lint",
    "lib": "vue-cli-service build --target lib package/index.js",
    // 指定入口文件路径
    "build": "cross-env NODE_ENV=build vue-cli-service build --target lib --inline-vue --entry package/index.js",
    "prepublish": "yarn build"
  },
  "keywords": [
    "vue",
    "element-ui",
    "flowable",
    "模型设计器"
  ],
  "files": [
    "dist",
    "package",
    "LICENSE",
    "README.md"
  ],
  "dependencies": {
    "@riophae/vue-treeselect": "^0.4.0",
    "bpmn-js": "^15.2.2",
    "bpmn-js-bpmnlint": "^0.21.0",
    "bpmnlint": "^9.2.0",
    "bpmnlint-loader": "^0.1.6",
    "diagram-js": "^12.8.1",
    "element-ui": "^2.15.14",
    "vkbeautify": "^0.99.3",
    "xcrud": "^0.4.19",
    "vue": "^2.6.14",
    "core-js": "^3.8.3"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~5.0.0",
    "@vue/cli-plugin-eslint": "~5.0.0",
    "@vue/cli-service": "~5.0.0",
    "babel-eslint": "^10.1.0",
    "cross-env": "^7.0.2",
    "eslint": "^7.5.0",
    "eslint-plugin-vue": "^6.2.2",
    "sass": "^1.26.10",
    "sass-loader": "^9.0.2",
    "vue-template-compiler": "^2.6.11"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
}

2. 创建发布忽略文件.npmignore

.DS_Store
node_modules
examples
public/
vue.config.js
babel.config.js
*.map
*.html
package-lock.json
yarn.lock

# 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*
*.map

3. npm publish发布组件包
发布前, 先前往 NPM官网 查询是否已有同名的组件. 已有同名组件无法发布!!!

查看本地npm厂库地址是否为 https://registry.npmjs.org/

npm config ls

在这里插入图片描述
若不是 这需要切换到npm的官方地址

npm set registry=https://registry.npmjs.org

执行登录命令, 输入账号,密码,邮箱 (若没有账号, 请前往 NPM官网 自行注册)
当出现Logged in as dengzemiao on https://registry.npmjs.org/字样表示登录成功

npm login

在这里插入图片描述
在输入完账号密码和邮箱后, 可能还需要验证一次性密码. 会发送到注册时的邮箱.

npm notice Please check your email for a one-time password (OTP)
Enter one-time password from your authenticator app: xxxxxxxx

返回项目, 执行命令 npm publish 发布组件库 (执行命令时会自动执行 prepublish 脚本)
当更新组件库后需要重新发布, 重新发布时, 需要修改 package.json 文件中的版本号. 否则无法发布成功

使用组件

发布成功后, 在 NPM官网 可查看到自己发布的项目. 使用一下命令导入组件库到自己的项目中使用

npm install workflow-bpmn-xy
<template>
  <div class="app-container">
    <bpmn-modeler
      ref="refNode"
      :xml="xml"
      :categorys="categorys"
      :options="options"
      :is-view="false"
      @save="handleSave"
      @showXml="showXml"
    >
    </bpmn-modeler>
  </div>
</template>

<script>
import BpmnModeler from 'workflow-bpmn-xy';
import {listUser} from "@/api/system/user";
import {listRole} from "@/api/system/role";

export default {
  name: "BpmnView",
  components: {BpmnModeler},
  data() {
    return {
      xml: '',
      categorys: [],
      options: {
        apis: {
          listUser,
          listRole
        }
      }

    }
  },
  methods: {
    handleSave(data) {
      console.log(data)
    },
    showXml(xml) {
      console.log('showXml', xml)
    }
  }
}
</script>

<style scoped lang="scss">

</style>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明天你好369

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值