如何在npm官网发表自己的封装的包

以下就是我在npm发布的包,可以搜索安装

自己封装的组件插件,不用再复制粘贴到自己的其他项目使用了,发布到npm,在项目中下载使用自己的包不香吗

在这里插入图片描述
在这里插入图片描述

发布流程如下:

一、首先你要有自己的npm账号

使用用户名,密码,邮箱注册

二、在Vue-cli搭建的项目的src文件下新建文件夹

可以在文件夹下新建一些自己插件需要使用的组件,在入口主文件新建自定义指令,构成基本结构

以我的插件为例目录结构如下:
在这里插入图片描述

三、业务如下

还是以我的插件为例,主要功能是提交表单内容,如果为空,自定义加入样式提示效果,其中在index.js自定义了输入框默认选中指令,这个例子比较简单,基本就是这些

1.myMsg.vue

<template>
  <div>
    <div class="msg" ref="msg" :class="{active:msgStatus}">
      <div class="msg-wapper">
        {{text}}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'myMsg',
  data () {
    return {
      text: '',
      msgStatus: false
    }
  },
  methods: {
    // 以默认配置为优先,以用户传入为覆盖
    msgPlugin (msg, time = 2000) {
      this.text = msg
      this.msgStatus = true
      setTimeout(() => {
        this.msgStatus = false
      }, time)
    }
  }

}
</script>

<style lang="less" scoped>
.msg{
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
  width: 0;
  min-height: 0;
  text-align: center;
  background-color: rgba(0, 0, 0, 0.5);
  border-radius: 5px;
  color: #fff;
  transition: all .5s;
  z-index: -1;
  opacity: 0;
}
.msg.active{
  width: 180px;
  height: 30px;
  line-height: 30px;
  opacity: 1;
  z-index: 11;
}
</style>

2.myDemo.vue

<template>
  <div>
   <h1>我是demo组件</h1>
  </div>
</template>

<script>
export default {
  name: 'myDemo'
}
</script>

<style>

</style>

3.index,js

在index.js中,使用了vue-cli自带的webpack的api require.context()
所有的import 都可以使用require.context引入 而且是动态引入
require.context()的参数:
1.目标文件夹2.是否匹配子文件夹3.正则匹配
可以优雅的把插件下的很多.vue结尾的组件全部引入注册
其中requireComment.keys()是所有.vue结尾的文件数组
fileName是每一个vue文件的循环项
config.default.name里的default就是.vue组件的script里的export default组件名称
也就是<script> export default { name: 'myDemo' } </script>
Vue.component(componentName, config.default || config)是对组件进行注册

const requireComment = require.context('./', true, /\.vue$/)
const install = (Vue) => {
  if (install.installed) {
    return
  }
  // eslint-disable-next-line no-unused-expressions
  install.installed
  console.log(requireComment.keys())
  requireComment.keys().forEach(fileName => {
  //  拿到当前的组件
    console.log(fileName)
    const config = requireComment(fileName)
    // 组件名
    const componentName = config.default.name
    Vue.component(componentName, config.default || config)
  })
  // 全局自定义指令
  Vue.directive('focus', {
    inserted: function (el) {
      el.focus()
    }
  })
}
// 确保是正常环境 node没有window
if (typeof window !== 'undefined' && window.Vue) {
  install(window.Vue)
}
export default {
  install
}

4.main.js

把index.js作为插件引入,并使用

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import myMsg from '@/plugins/index.js'
Vue.config.productionTip = false
Vue.use(myMsg)
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

5.在HelloWorld.vue中使用

其中在plugins的左右vue组件只要带有name的都可以直接使用
因为在index.js已经全部动态引入了,无需再次注册
<my-demo></my-demo>就是例子

<template>
  <div>
    <h1>自定义插件学习</h1>
    <input v-focus type="text" v-model="tel"> <button @click="commitPhone">提交</button>
    <my-msg ref="msg"></my-msg>
    <my-demo></my-demo>
  </div>
</template>

<script>
export default {
  data () {
    return {
      tel: ''
    }
  },
  methods: {
    commitPhone () {
      if (!this.tel) {
        this.$nextTick(() => {
          this.$refs.msg.msgPlugin('请输入电话号码', 1000)
        })
      }
    }
  }
}
</script>

<style>

</style>

6.效果如下:

点击之前:

在这里插入图片描述

点击之后:

在这里插入图片描述

四、打包发布

1.在package.json中配置

在这里插入图片描述

2.使用npm run lib进行打包生成lib文件夹

在这里插入图片描述
在这里插入图片描述

3.在命令行登录npm
输入npm login
和自己注册账号的用户名、密码、邮箱

在这里插入图片描述

4.在输入npm publish 命令发布即可
我那个发布过了,就直接看发布结果把

在这里插入图片描述

五、注意事项

需要封装发布的插件文件夹不建议在当前项目的package,json中配置,因为可能导致当前项目出现异常,建议新建一个新项目来打包发布上线

创作不易,以上就是我的分享了,如果感觉对你们有帮助的铁汁们记得点赞关注一波

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值