zoukankan      html  css  js  c++  java
  • npm 发布 vue 组件

    创建 vue 组件

    1、创建vue项目,为了简洁方便,推荐使用webpack-simple构建一个项目

    vue init webpack-simple your-project
    

    2、在 src 目录下新建子目录lib,用来放后面自己写的所有组件

    dir

    3、编写自己的组件

    首先新建一个vue文件和一个index.js
    vue用于编写组件的模版和逻辑,像平时封装插件一样
    ps:需要给组件命名 name: xxx,用于后面的导出
    具体如下:
    index.js 作用是将该组件作为 Vue 插件,注册到 Vue 中

    /** index.js **/
    import xTable from './x-table.vue';
    xTable.install = Vue => Vue.component(xTable.name, xTable);//.name就是开始说的vue文件暴露出来的name名,ldcPagination整个组件
    export default xTable
    

    4、最后集中管理,全部导出,可同时编写多个组件组成组件库,一起导出
    App.vue同级目录我新建了一个index.js文件

    // 导入所有组件
    import xTable from './table/index.js'
    import xTableCol from './table-column/index.js'
    
    const components = [xTable, xTableCol, hello]
    const install = function(vue) {
      /* istanbul ignore if */
      if (install.installed) return;
      /*eslint-disable*/
      components.map((component) => {
        vue.component(component.name, component); //component.name 此处使用到组件vue文件中的 name 属性
      });
    };
    /* istanbul ignore if */
    if (typeof window !== 'undefined' && window.Vue) {
      install(window.Vue);
    };
    
    export default {
      install,
      xTable,
      xTableCol
    }
    

    ps:如果是单个组件也可以不用编写第3中的与组件vue文件同级的index.js,直接在这里import引入,然后导出

    5、修改配置文件
    打包之前,首先我们需要改一下 webpack.config.js 这个文件

    // ... 此处省略代码 
    // 执行环境
    const NODE_ENV = process.env.NODE_ENV
    
    module.exports = {
      // 改变入口
      entry: './src/lib/index.js',
      output: {
        // 修改打包出口,在最外级目录打包出一个 index.js 文件,我们 import 默认会指向这个文件
        path: path.resolve(__dirname, './dist'),
        publicPath: '/dist/',
        filename: "x-vue-element-table.min.js",
        library: "xEleTable", // 指定的就是你使用require时的模块名
        libraryTarget: 'umd', // libraryTarget会生成不同umd的代码,可以只是commonjs标准的,也可以是指amd标准的,也可以只是通过script标签引入的
        umdNamedDefine: true // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
      },
      // ... 此处省略代码 
    }
    

    修改 package.json 文件(主要):

    // ... 此处省略代码 
    // 发布开源因此需要将这个字段改为 false
    "private": false,
    // 这个指 import xEleTable 的时候它会去检索的路径
    "main": "dist/vue-element-table.min.js",
    // ... 此处省略代码 
    

    还有其他可配置项(非必须)

    "bugs": {
        "url": "https://github.com/xxx/xxx/issues"
    },
    "repository": {
        "type": "git",
        "url": "git@https://github.com/xxx/xxx.git"
    },
    

    5、测试,测试这些配置是否OK以及组件是否能够正常运行
    首先通过命令npm run build打包,打包完成后产生dist文件,这个打包之后的文件的文件名是在webpack.config.js

    webpack.config

    接着执行命令npm pack,会产生一个压缩包,在与webpack.config.js同一级目录
    然后可以本地新建一项目测试是否可用
    在测试项目中,通过npm install 组件项目打包后的本地绝对路径/文件全名添加依赖
    在main.js入口文件引入即可

    import 名称 from ‘组件库名’
    Vue.use(名称);
    

    具体可参考

    import xEleTable from 'x-vue-element-table'
    Vue.use(xEleTable)
    

    然后在项目的任意组件中引用就行了,如果引入成功,则说明打包成功,然后在发布

    发布到 npm

    准备工作OK,现在开始正式发布

    //首先去npm官网注册一个npm账号
    npm login    // 登陆你的用户,密码
    npm publish  // 进行发布
    

    在这个过程中,可能会出些问题
    如果遇到以下这个错误

    npm ERR! You do not have permission to publish "nodenpm". Are you logged in as the correct user? : nodenpm
    

    【原因】可能是自己的组件名与npm中已有的组件名冲突,需要换成另一个还未被使用过的

    另外提供几个常见错误解决方案(来自网络,有些自己遇到过~)
    npm adduser报错Unable to authenticate?
    npm publish项目报错

    ps:遇到其他具体问题可自行百度解决~

    具体源码:x-vue-element-table源码

    ps:本文首发于我的segmentfault npm 发布 vue 组件

    参考:
    https://blog.csdn.net/qq_40513881/article/details/82494958
    https://juejin.im/post/5b45df255188251b1d474860
    https://blog.csdn.net/cscscssjsp/article/details/82501745
    https://blog.suzper.com/2017/10/13/发布自己的vue组件库/

  • 相关阅读:
    springboot系列九,springboot整合邮件服务、整合定时任务调度
    springboot系列八、springboot整合kafka
    springboot系列六、springboot配置错误页面及全局异常
    springboot系列五、springboot常用注解使用说明
    springboot系列四、配置模板引擎、配置热部署
    springboot系列三、springboot 单元测试、配置访问路径、多个配置文件和多环境配置,项目打包发布
    springboot系列二、springboot项目搭建
    springboot系列一、springboot产生背景及介绍
    kafka系列十、kafka常用管理命令
    Jmeter4.X
  • 原文地址:https://www.cnblogs.com/136asdxxl/p/10673658.html
Copyright © 2011-2022 走看看