vue cli3发布组件到npm上

组件内的内容

<template>
    <div :class="classes">
        <button :class="buttonClasses" @click="goClick" :style="buttonStyle"><slot></slot></button>
    </div>
</template>
<script>
const cssPrefix = "ft-button";
export default {
  name: "ftButton",
  props: {
    backgroundColor: {
      //按钮颜色
      type: String,
      default: "#1eaa81"
    },
    width: {
      type: String,
      default: "315px"
    },
    height:{
        type: String,
        default: "45px"
    },
    color:{
         type: String,
        default: "white"
    },
     borderRadius:{
      type: String,
      default: "5px"
    },
    borderWidth:{
       type: String,
       default: "0px"
    },
  },
  methods: {
      goClick(){
           this.$emit("click");
      }
  },
  computed: {
      classes(){
          return cssPrefix;
      },
      buttonClasses(){
           return cssPrefix+'-bu';
      },
      buttonStyle(){
          return {backgroundColor:this.backgroundColor,width:this.width,height:this.height,color:this.color,borderRadius:this.borderRadius,borderWidth:this.borderWidth}
      }
  },
}
</script>
<style lang="less" scoped>
@import url("../style/ft-button.less");
</style>

组件的index.js文件

import ftTopBar from './component/ft-top-bar.vue'
import ftInput from './component/ft-input.vue'
import ftButton from './component/ft-button.vue'
const ftComponents = [
    ftTopBar,
    ftInput,
    ftButton
]
const install = function(Vue, opts = {}) {
  ftComponents.map(component => {
      Vue.component(component.name, component);
    })
  }

  /* 支持使用标签的方式引入 */
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue);
}
export default {
  install,
  ftTopBar,
  ftInput,
  ftButton
}

vue.config.js文件

const path = require("path");
const resolve = dir => {
  return path.join(__dirname, dir);
};
const BASE_URL = process.env.NODE_ENV === "production" ? "/" : "/";
module.exports = {
  publicPath: BASE_URL,
  pages: {
    index: {
      entry: process.env.NODE_ENV == 'development' ? './src/main.ts' : './src/components/index.js',//重点
    }
  },
  chainWebpack: config => {//重点
    config.resolve.alias
      .set("@", resolve("src"))
      .set("_c", resolve("src/components"));
    config.output.filename('ftui.js');
    config.output.library('ftui');
    config.output.libraryTarget('umd');
    config.output.umdNamedDefine(true);
  },
  // 打包时不生成.map文件
  productionSourceMap: true,
  devServer: {   
    disableHostCheck: true,
    port: 8071
  }
};

package.json

  "name": "ftui",//名字将决定安装时import什么
  "version": "0.1.8",
  "main": "dist/ftui.common.js",
    "scripts": {
    "build-bundle": "vue-cli-service build --target lib --name ftui ./src/components/index.js"
  },

最后
npm run build-bundle
npm login // 登陆
npm publish // 发布
就发布上去了
也可
npm install ftui
import ftui from ‘ftui’
Vue.use(ftui)
代码开源,直接看就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值