创建 vue 组件

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

vue init webpack-simple your-project

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

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

接着执行命令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组件库/

npm 发布 vue 组件的更多相关文章

  1. npm发布vue组件流程

    初始化项目vue init webpack-simple XXX 定义组件略 发布配置1.package.json 2.webpack.config.js(注释部分为原配置) 发布1.登录 2.发布n ...

  2. 从零开始开发一个vue组件打包并发布到npm (把vue组件打包成一个可以直接引用的js文件)

    自己写的组件 有的也挺好的,为了方便以后用自己再用或者给别人用,把组件打包发布到npm是最好不过了,本次打包支持 支持正常的组件调用方式,也支持Vue.use, 也可以直接引用打包好的js文件, 配合 ...

  3. 手把手教你封装 Vue 组件并使用 NPM 发布

    Vue 开发插件 我们可以先查看Vue的插件的开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: ps: 这里注意一下包的名 ...

  4. 手把手教你封装 Vue 组件,并使用 npm 发布

    Vue 开发插件 开发之前先看看官网的 开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: // 这里注意一下包的名字前缀是 ...

  5. 将 Vue 组件库发布到 npm

    制作了一套自己的组件库,并发布到npm上,项目代码见 GitHub . 前期准备 有一个npm账号 安装了vue-cli 搭建项目 vue init webpack hg-vcomponents cd ...

  6. 基于vue组件,发布npm包

    亲测好用,如出错,请留言 1.项目初始化 使用vue脚手架创建,但vuecli太重,我们使用简单的工程脚手架进行处理,输入命令 vue init webpack-simple my-project n ...

  7. 自定义Vue组件打包、发布到npm以及使用

    本文将帮助:将自己写的Vue组件打包到npm进行代码托管,以及正常发布之后如何使用自己的组件. 本文讲述的仅仅是最基础的实现,其他复杂的操作需要非常熟悉webpack的相关知识,作者将继续学习. 先附 ...

  8. vue cli4构建基于typescript的vue组件并发布到npm

    基于vue cli创建一个vue项目 首先安装最新的vue cli脚手架, npm install --global @vue/cli npm WARN optional SKIPPING OPTIO ...

  9. 如何从0开发一个Vue组件库并发布到npm

    1.新建文件夹在终端打开执行 npm init -y 生成package.json如下,注意如果要发布到npm,name不能有下划线,大写字母等 { "name": "v ...

随机推荐

  1. 阶段3 2.Spring_08.面向切面编程 AOP_7 通用化切入点表达式

    下面配置了通用的表达式,,上面的四个就不用再配置那么长 索罗的切入点表达式了. 节省了每次都要写一长段表达式的过程 写在一个aop:aspect这个切面下面就只能当前切面用 写在切面里面 运行测试 挪 ...

  2. Dart学习笔记-运算符-条件表达式-类型转换

    Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...

  3. Chrome OS支持在窗口中运行Linux了!!!

    借助Crouton Chrome扩展,Chrome OS可以在窗口中运行Linux了.在使用该扩展之前,你需要先将自己的Chromebook设置成开发者模式(Develeper Mode). 此前,C ...

  4. WebApi使用二进制方式上传和下载文件

    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; usi ...

  5. eclipse 包含头文件出错

    最近这段时间自己在写游戏的框架,在做的过程中遇到了一个问题:没办法#include <iostream>,在eclipse下F3也找不到对应的 iostream 文件, 最后在晚上找资料, ...

  6. Microsoft Remote Desktop for Mac

    因为teamviewer 又限制经常断线,所以改用 Microsoft Remote Desktop  代替,用来从mac连接远程windows 主要记录一下下载地址,因为在mac app store ...

  7. H3C版本升级

    H3C S5500和S3100都可以通过TFTP方式进行升级,1.设置交换机的vlan1的ip地址,如10.10.10.2/242.设置电脑和交换机连接的ip地址,如10.10.10.1/243.在交 ...

  8. C++ 优先队列 priority_queue

    平时定义的时候,直接上就完事了: priority_queue<int>Q; 默认大根堆. 之前很菜的时候不知道小根堆怎么写,还在考场上干过加个负号甩到大根堆里面去的蠢事. 它的完整形式呢 ...

  9. elementUI -->实现简单的购物车

    <template> <div class="bbb"> <el-checkbox :indeterminate="isIndetermin ...

  10. 封装jquery插件

    最近要到使用别的jquery插件,但部分功能并不能满足,为满足功能,只能对插件进行修改来满足,要修改插件,先要了解插件如何封装, 明白了如何封装插件,才能更好修改插件:如何封装插件? 1.插件封装类型 ...