一.使用vuecli3创建项目

vue create svgicon

二.修改目录,开发组件前的准备

把src目录改为examples作为查看组件的演示目录,新建packages目录作为组件编写的目录。

在packages下新建index.js作为导出组件入口,作为整个组件库的导出,新建组件文件夹作为组件源码的放置,比如我的组件目录叫做 svg-icon ,在svg-icon文件夹下新建index.js文件对外提供对文件的引用,新建src文件夹并创建svg-icon.vue作为组件文件。整个packages文件夹下是如下的样子:

在项目根目录下新建vue.config.js并添加如下修改 src 目录 为 examples 目录

module.exports = {
// 修改 src 目录 为 examples 目录
pages: {
index: {
entry: 'examples/main.js',
template: 'public/index.html',
filename: 'index.html'
}
}
}

三.编写组件

<template>
<dir>一个新的svg-icon组件</dir>
</template>

在packages/svg-icon/index.js导出组件

// 导入组件,组件必须声明 name
import SvgIcon from './src/svg-icon.vue' // 为组件提供 install 安装方法,供按需引入
SvgIcon.install = function (Vue) {
Vue.component(SvgIcon.name, SvgIcon)
} // 默认导出组件
export default SvgIcon

在packages/index,js 整合所有的组件,对外导出,即一个完整的组件库

// 导入颜色选择器组件
import SvgIcon from './svg-icon' // 存储组件列表
const components = [
SvgIcon
] // 定义 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,
// 以下是具体的组件列表
SvgIcon
}

四.编写示例

在 examples/main.js中引入写好的组件

import Vue from 'vue'
import App from './App.vue'
// 导入组件库
import SvgIcon from './../packages/index'
// 注册组件库
Vue.use(SvgIcon) Vue.config.productionTip = false new Vue({
render: h => h(App),
}).$mount('#app')

在示例中 examples文件夹下 使用组件库中的组件,在上一步用使用 Vue.use() 全局注册后,即可在任意页面直接使用了,而不需另外引入。当然也可以按需引入。

<template>
<div id="app">
<svg-icon icon-class="Abook" />
</div>
</template> <script> export default {
name: 'app',
}
</script>

五.发布前的准备

在根目录添加 .npmignore 文件,设置忽略发布文件。我们发布到 npm 中,只有编译后的 lib 目录、package.json、README.md才是需要被发布的。所以我们需要设置忽略目录和文件。

.DS_Store
node_modules/
examples/
packages/
public/
vue.config.js
babel.config.js
*.map
*.html # local env files
.env.local
.env.*.local # Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log* # Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

package.js 中新增一条编译为库的命令,vuecli3提供了一个构建目标库的命令,可以查看官方文档详细了解:https://cli.vuejs.org/zh/guide/build-targets.html#%E5%BA%93

vue-cli-service build --target lib --name myLib [entry]
  • --target : 构建目标,默认为应用模式。这里修改为 lib 启用库模式。
  • --dest : 输出目录,默认 dist 。这里我们改成 lib
  • [entry] : 最后一个参数为入口文件,默认为 src/App.vue 。这里我们指定编译 packages/ 组件库目录。

这里我添加的是:

...
"scripts": {
...
"lib": "vue-cli-service build --target lib --name vue-svgicon-coms --dest lib packages/index.js",
...
},
...

 并在package.json中添加npm包的一些详细信息,仅供参考:

  "name": "vue-svgicon-coms",
"version": "1.0.1",
"author": "jason",
"description": "vue-svg-components",
"main": "lib/vue-svgicon-coms.umd.min.js",
"keyword": "vue svg icon",
"license": "MIT",
"private": false

  执行编译:

npm run lib

 然后可以看到编译成功:

  

项目的根目录也多了一个lib文件夹

六.注册npm账号

如果之前修改过npm源为淘宝镜像,先改回为npm镜像

npm config set registry http://registry.npmjs.org

使用npm账号登录

npm login

如果还没有npm账号,使用新建npm账号

使用  npm adduser 命令创建 npm 账号,会提示输入用户名/密码/邮箱

然后在浏览器注册时使用的邮箱,点击注册链接完成邮箱认证。

执行发布命令,发布组件到 npm

 npm publish

七.发布成功

发布成功后稍等几分钟,即可在 npm 官网搜索到。以下是刚提交的 vue-svgicon-coms

八.更新npm包

每次修改完组件后,我们需要修改 package.json 的version版本

规则:对于"version":"x.y.z"
1.修复bug,小改动,增加z
2.增加了新特性,但仍能向后兼容,增加y
3.有很大的改动,无法向后兼容,增加x
 
然后重新打包并上传npm
npm run lib
npm public

也可以使用命令修改版本:

使用命令:npm version <update_type>进行修改,update_type 有三个参数,

第一个是patch, 第二个是minor,第三个是 major,

patch:这个是补丁的意思;

minor:这个是小修小改;

major:这个是大改动;

具体咋用:

比如我想来个1.0.1版本,注意,是最后一位修改了增1,那么命令:npm version patch 回车就可以了;

比如我想来个1.1.0版本,注意,是第二位修改了增1,那么命令: npm version minor 回车就可以了;

比如我想来个2.0.0版本,注意,是第一位修改了增1,那么命令: npm version major 回车就可以了;

然后 使用 npm publish 发布即可
 
 
 

使用vuecli3发布npm包的更多相关文章

  1. 使用Vue-cli3.0创建的项目,如何发布npm包

    使用Vue-cli3.0创建的项目,如何发布npm包 在使用vue进行项目开发时,如果我们想要发布一个包,有时候会有点迷糊,不知道应该怎么修改脚手架的默认设置.这里记录一下一些常见的操作. 创建ind ...

  2. 创建并发布npm包

    1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站注册地址:https://www.npmjs.com/signup 2.命令行工具登录npm np ...

  3. 使用cnpm搭建私有NPM仓库 发布npm包

    关于如何使用cnpm搭建私有的npm仓库看这里→ http://blog.fens.me/nodejs-cnpm-npm/ 我本人还没有机会真正实践操作过,公司的npm仓库是我老大搭建的,我这里仅仅记 ...

  4. 不会发布npm包?进来看看?

    前言 npm(Node Package Manager),一个Node的包管理器,平时我们常用的公共模块(插件)或者叫做包大多都放在上面,所以接下来要封装的插件,我们就简单称它为npm包,本文从就从这 ...

  5. 前端组件用 Scope 发布 npm 包的方法

    1.引言 多人.多组织或多组件发布 npm 包到同一个仓库时,可能出现命名冲突问题. 为了解决这个问题,npm 引入了“scope”(范围)概念. 在 Angular 项目中,我们通常可以看到“@an ...

  6. node学习笔记8——发布npm包

    1.注册一个npm账号: 2.在控制台输入 npm login: 依次输入你的账号信息,可通过 npm whoami 来验证是否登录成功 3.初始化包,控制台输入 npm init: 完成之后,可以看 ...

  7. 用@vue/cli发布npm包

    1.环境准备 安装node,npm,@vue/cli 2.初始化项目 用@vue/cli创建新项目 vue create mtest-ui 删除public,main.js,App.vue等无关文件, ...

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

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

  9. 开发并发布npm包,支持TypeScript提示,rollup构建打包

    前言: 工作了几年,想把一些不好找现成的库的常用方法整理一下,发布成npm包,方便使用.也学习一下开发发布流程. 主要用到的工具:npm. 开发库:babel.typescript.rollup.es ...

随机推荐

  1. ios下app内嵌h5页面是video适配问题

    ios下做新闻详情用h5页面实现然后打包到app中,其中新闻详情页会有视频,安卓下video的poster可以做到适应video大小,但是ios下会按照poster图片大小将video等比撑大,但是视 ...

  2. Https 与 iOS 信息安全

    转载自:swift-cafe 什么是 Https 咱们从最直观的说起. 我们平时在用电脑访问网页的时候,有时候会在地址栏的左边多出一个小锁的图标,就像这样: 这是大多数主流浏览器的一个通用做法,当我们 ...

  3. Python的深浅拷贝

    Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...

  4. Linux系统运行级别和关机重启命令介绍

    Linux系统运行级别介绍 Linux系统有七种运行级别(Run Level),各个运行级别下,系统有不同的状态,各个级别的意义描述如下. 0:关键级别1:单用户运行级别,运行rc.sysinit和r ...

  5. ProvisionedAppxPackage VS AppxPackage

    正文 先来说说问题的由来. 在 Preinstall 的 component 中,有一支 component 叫做 MS_StartApp,这个 component 的行为是在预安装时为目标机器装入一 ...

  6. USACO 07DEC 道路建设(Building Roads)

    Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he ...

  7. Linux基于webRTC的二次开发(一)

    最近在做Linux平台下webRTC的二次开发,一路摸索,中间踩了不少坑,这一篇博客先来简单介绍下Linux上如何使用GCC编译webRTC. 为什么使用GCC编译? 这其实是无奈之举,Linux下w ...

  8. 网络安全-主动信息收集篇第二章-三层网络发现之ping

    第三层网络扫描基于TCP/IP.ICMP协议. 优点:可路由.速度比较快 缺点:相对于二层网络扫描较慢,容易被边界防火墙过滤 所有扫描发现技术,都会有相应的对抗办法,所以无论是来自二层的网络扫描还是来 ...

  9. Asp.net Core 系列之--2.ORM初探:Dapper实现MySql数据库各类操作

    ChuanGoing 2019-09-10 距离上一篇近一个月时间,断断续续才把本篇码完,后面将加快进度,争取年度内把本系列基本介绍完成,同时督促本人持续学习. 本篇学习曲线: 1.初识Dapper ...

  10. 爬虫学习--Day4(小猿圈爬虫开发_2)

    requests模块 - urllib模块 - requests模块 requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高.作用:模拟浏览器发送请求. 如 ...