发布vue组件到npm上的详细过程和npm login失败的解决方案

崔烈
• 阅读 1079

发布vue组件到npm上的详细过程和npm login失败的解决方案

需求

  1. 为了方便组件的使用,将vue组件打包并发布到npm上,或者直接利用到项目中引入使用

    实现

  2. 利用脚手架创建项目 vue create demo
  3. 创建好之后在目录新建一个packages目录用于存放组件,当然也可以在src中创建一个目录存放
    发布vue组件到npm上的详细过程和npm login失败的解决方案
  4. 由于创建了packages目录在src外部,脚手架不会对该目录编译,因此需要配置webpack进行编译,在vue.config.js文件中配置

    // vue.config.js
    module.exports = {
      pages: {
        index: {
          entry: 'src/main.js',
          template: 'public/index.html',
          filename: 'index.html'
        }
      },
      chainWebpack: config => {
        config.module
          .rule('js')
          .include
            .add('/packages')
            .end()
          .use('babel')
            .loader('babel-loader')
            .tap(options => {
              return options
            })
      }
    }
  5. 创建组件目录和组件入口,先在packages目录下创建一个zlDemo文件和一个index.js文件,用来配置该目录下的组件

    // packages/index.js
    import zlDemo from './zlDemo'
    
    // 存储组件列表
    const components = [
      zlDemo
    ]
    
    // 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,则所有的组件都将被注册
    const install = function (Vue) {
      // 判断是否安装
      if (install.installed) return
      // 遍历注册全局组件
      components.map(component => Vue.component(component.name, component))
    }
    
    // 判断是否是直接引入文件
    if (typeof window !== 'undefined' && window.Vue) {
      install(window.Vue)
    }
    
    export default {
      // 导出的对象必须具有 install,才能被 Vue.use() 方法安装
      install,
      // 以下是具体的组件列表
      zlDemo
    }
    
  6. 创建组件,在packages/zlDemo目录下创建index.js和index.vue组件文件,代码如下

    // packages/zlDemo/index.js
    import zlToast from './index.vue'
    
    zlToast.install = function (Vue) {
      Vue.component(zlToast.name, zlToast)
    }
    
    export default zlToast
    
    // packages/zlDemo/index.vue
    <template>
      <div class="zl-demo ceshi">
        这是一个demo
      </div>
    </template>
    
    <script>
    export default {
      name: 'zlDemo'
    }
    </script>
    
    <style>
    </style>
    
  7. 配置打包命令,在package.json文件中添加lib命令用于打包

    // package.json
    "scripts": { // 配置打包命令
        "lib": "vue-cli-service build --target lib --name  zlDemo1 --dest lib packages/index.js"
      }
      "private": false, // 公开
      "name": "zlDemo", // 组件名称
      "version": "0.1.0", // 版本号
      "author": "zhanle_huang", // 作者
  8. 打包后可以直接引入“名称.umd.js”到相同vue版本的项目使用,使用方式有两种

    // 在main.js中引入
    import zldemo from './zldemo.js'
    app.use(zldemo)
    // 在组件中引入
    import zldemo from './zldemo.js'
    // 这里需要注意了,需要采用这种方式进行注册
    export default {
        components: {
        // 这里的xxx表示定义packages/index.js下定义的名称
            zldemo: zldemo.xxx 
        },
  9. 注册npm账号
    地址:npm官网.
  10. 注册好之后打开项目根目录执行 npm login
  11. 登录成功之后再执行npm publish就会提示完成(发布前可以npm i 包名)看看有没有重复,有就改名字
  12. 登录失败的一个错误解决方案https://blog.csdn.net/ta_huang/article/details/122615787?spm=1001.2014.3001.5501.

总结

  1. 按照上述步骤就可以打包一个属于自己的npm组件并发布到npm上,这是博主自己发布的一个测试包地址https://www.npmjs.com/package/zl-democs1. 可以下载来看看,里面代码是完整的
  2. 完整项目地址:https://gitee.com/huang_zhan_...
ps:喜欢前端或者正在学习前端可以关注博主学习更多前端知识
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
React TypeScript 从零实现 Popup 组件发布到 npm
本文转载自掘金《从0到1发布一个Popup组件到npm》,作者「海秋」。点击下方阅读原文去点个赞吧!上篇文章\1\中介绍了如何从0到1搭建一个React组件库架子,但为了一两个组件去搭建组件库未免显得大材小用。这次以移动端常见的一个组件Popup为例,以最方便快捷的形式发布一个流程完整的npm包。
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
崔烈
崔烈
Lv1
楚乡飞鸟没,独与碧云还。
文章
4
粉丝
0
获赞
0