npm 发布 vue 组件
创建 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:遇到其他具体问题可自行百度解决~
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 组件的更多相关文章
- npm发布vue组件流程
初始化项目vue init webpack-simple XXX 定义组件略 发布配置1.package.json 2.webpack.config.js(注释部分为原配置) 发布1.登录 2.发布n ...
- 从零开始开发一个vue组件打包并发布到npm (把vue组件打包成一个可以直接引用的js文件)
自己写的组件 有的也挺好的,为了方便以后用自己再用或者给别人用,把组件打包发布到npm是最好不过了,本次打包支持 支持正常的组件调用方式,也支持Vue.use, 也可以直接引用打包好的js文件, 配合 ...
- 手把手教你封装 Vue 组件并使用 NPM 发布
Vue 开发插件 我们可以先查看Vue的插件的开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: ps: 这里注意一下包的名 ...
- 手把手教你封装 Vue 组件,并使用 npm 发布
Vue 开发插件 开发之前先看看官网的 开发规范 我们开发的之后期望的结果是支持 import.require 或者直接使用 script 标签的形式引入,就像这样: // 这里注意一下包的名字前缀是 ...
- 将 Vue 组件库发布到 npm
制作了一套自己的组件库,并发布到npm上,项目代码见 GitHub . 前期准备 有一个npm账号 安装了vue-cli 搭建项目 vue init webpack hg-vcomponents cd ...
- 基于vue组件,发布npm包
亲测好用,如出错,请留言 1.项目初始化 使用vue脚手架创建,但vuecli太重,我们使用简单的工程脚手架进行处理,输入命令 vue init webpack-simple my-project n ...
- 自定义Vue组件打包、发布到npm以及使用
本文将帮助:将自己写的Vue组件打包到npm进行代码托管,以及正常发布之后如何使用自己的组件. 本文讲述的仅仅是最基础的实现,其他复杂的操作需要非常熟悉webpack的相关知识,作者将继续学习. 先附 ...
- vue cli4构建基于typescript的vue组件并发布到npm
基于vue cli创建一个vue项目 首先安装最新的vue cli脚手架, npm install --global @vue/cli npm WARN optional SKIPPING OPTIO ...
- 如何从0开发一个Vue组件库并发布到npm
1.新建文件夹在终端打开执行 npm init -y 生成package.json如下,注意如果要发布到npm,name不能有下划线,大写字母等 { "name": "v ...
随机推荐
- 阶段3 2.Spring_08.面向切面编程 AOP_7 通用化切入点表达式
下面配置了通用的表达式,,上面的四个就不用再配置那么长 索罗的切入点表达式了. 节省了每次都要写一长段表达式的过程 写在一个aop:aspect这个切面下面就只能当前切面用 写在切面里面 运行测试 挪 ...
- Dart学习笔记-运算符-条件表达式-类型转换
Dart学习笔记-运算符-条件表达式-类型转换 一.运算符 1.算术运算符 + (加)- (减)* (乘)/ (除)~/ (取整) %(取余) 2.关系运算符 == (等等) != (不等) > ...
- Chrome OS支持在窗口中运行Linux了!!!
借助Crouton Chrome扩展,Chrome OS可以在窗口中运行Linux了.在使用该扩展之前,你需要先将自己的Chromebook设置成开发者模式(Develeper Mode). 此前,C ...
- WebApi使用二进制方式上传和下载文件
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; usi ...
- eclipse 包含头文件出错
最近这段时间自己在写游戏的框架,在做的过程中遇到了一个问题:没办法#include <iostream>,在eclipse下F3也找不到对应的 iostream 文件, 最后在晚上找资料, ...
- Microsoft Remote Desktop for Mac
因为teamviewer 又限制经常断线,所以改用 Microsoft Remote Desktop 代替,用来从mac连接远程windows 主要记录一下下载地址,因为在mac app store ...
- H3C版本升级
H3C S5500和S3100都可以通过TFTP方式进行升级,1.设置交换机的vlan1的ip地址,如10.10.10.2/242.设置电脑和交换机连接的ip地址,如10.10.10.1/243.在交 ...
- C++ 优先队列 priority_queue
平时定义的时候,直接上就完事了: priority_queue<int>Q; 默认大根堆. 之前很菜的时候不知道小根堆怎么写,还在考场上干过加个负号甩到大根堆里面去的蠢事. 它的完整形式呢 ...
- elementUI -->实现简单的购物车
<template> <div class="bbb"> <el-checkbox :indeterminate="isIndetermin ...
- 封装jquery插件
最近要到使用别的jquery插件,但部分功能并不能满足,为满足功能,只能对插件进行修改来满足,要修改插件,先要了解插件如何封装, 明白了如何封装插件,才能更好修改插件:如何封装插件? 1.插件封装类型 ...