1. 安装 cli

npm install -g @vue/cli
vue create winyh-ui

  

2.安装 antd-design-vue

cnpm i ant-design-vue --save

  

3.配置按需加载

cnpm i babel-plugin-import --save-dev

修改根目录的 babel.config.js, 配置 babel-plugin-import
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
plugins: [
[
"import",
{ libraryName: "ant-design-vue", libraryDirectory: "es", style: true }
]
]
}

    

4.配置less

运行报错:

Module not found: Error: Can't resolve 'less-loader'

解决办法:

cnpm i less less-loader --save-dev

根目录创建 vue.config.js 文件,配置如下
module.exports = {
css: {
loaderOptions: {
less: {
javascriptEnabled: true
}
}
}
}

  

5.项目中引用

src/main.js 文件中
import Vue from 'vue'
import { Button, Select } from 'ant-design-vue';
import App from './App' Vue.component(Button.name, Button)
Vue.component(Select.name, Select) /* 或写为
* Vue.use(Button)
* Vue.use(Select)
*/ Vue.config.productionTip = false new Vue({
render: h => h(App)
}).$mount("#app"); 组件中就可以使用:
<a-button type="primary">winyh</a-button>

  

6.启动项目

npm run serve

  

预览效果

7.封装组件

新建 packages 目录,packages 目录下新建 index.js 文件对外集中抛出配置。

每个组件在 packages 目录下以 单个目录的形式存在,例如 row 组件结构。

row/src/main.vue 组件封装 (组件封装中必须设置 name 选项,为组件的对外唯一标签)

row/index.js 对外抛出当前封装的组件

// button/src/main.vue

<template>
<div>
<a-button>winyh<a-button>
</div>
</template> <script>
export default {
name:"PButton",
}
</script> <style lang="less"> </style>

  

// row/index.js

import PButton from './src/main.vue'

// 为组件提供 install 方法
PButton.install = function (Vue) {
Vue.component(PButton.name, Row)
} // 导出组件
export default PButton

  

// packages/index.js

import PRow from './row'

// 组件集合,用于遍历
const components = [
PRow
] // 定义 install 方法
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,// 导出的对象必须具备一个 install 方法
...components, // 组件列表
}

  组件封装完毕

8.使用

import Vue from 'vue'
import { Button } from 'ant-design-vue'
import App from './App.vue' // 导入组件库
import PButton from '../packages'
// 使用组件库
Vue.use(PButton) [Button].forEach(item =>
Vue.use(item)
); /*
* 也可以这样使用
* Vue.component(Button.name, Button)
* Vue.component(Select.name, Select)
*/ Vue.config.productionTip = false new Vue({
render: h => h(App),
}).$mount('#app')

  

在上一步用使用 Vue.use() 全局注册后,即可在任意页面直接使用了,而不需另外引入

<template>
<div id="app">
<PButton>winyh</PButton>
</div>
</template> <script>
export default {
name: 'app',
}
</script> <style>
</style>

  

9.打包

vue-cli 库打包命令 官方介绍

vue-cli-service build --target lib --name myLib [entry]

这个入口可以是一个 .js 或一个 .vue 文件。如果没有指定入口,则会使用 src/App.vue,改为  packages/index.js

  

配置package.json

  • name: 包名,该名字是唯一的。可在 npm 官网搜索名字,如果存在则需换个名字。
  • version: 版本号,每次发布至 npm 需要修改版本号,不能和历史版本号相同。
  • description: 描述。
  • main: "lib/vplgui.common.js", 入口文件,应指向编译后的包文件(路径要和上面构建出来的目录和文件名对应上,如果不配置,我们在其他项目中就不用import XX from '包名'来引用了)
  • keyword:关键字,以空格分离希望用户最终搜索的词。("keywords": [ "vue", "maucash", "code", "maucash code" ])
  • author:作者
  • files : 指定打包后包中存在的文件夹 ("files": [ "dist", "src" ])
  • private:是否私有,需要修改为 false 才能发布到 npm
  • homepage : "https://github.com/winyh/XXX", 项目主页
  • repository: 指定代码所在的仓库地址"repository": { "type": "git", "url": "git@github.com:winyh/vplgui.git" }
  • license: 开源

添加 .npmignore

// 语法跟 .gitignore 一样

.DS_Store
node_modules/
packages/
public/
vue.config.js
babel.config.js # Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log* # Editor directories and files
.idea
.vscode

  

添加 lib 脚本

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

执行 npm run lib 打包编译。(会生成 lib 文件夹)

10.NPM中文文档

https://www.npmjs.cn/

10.发布  

npm login

npm adduser

npm publish

  

注意事项:每次发布时都需要递进更新版本号!

vue-cli4.0 基于 antd-design-vue 二次封装发布到 npm 仓库的更多相关文章

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

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

  2. 基于Ant Design Vue封装一个表单控件

    开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ...

  3. vue cli4.0 配置环境变量

    温馨提示:本文只适用于vue-cli 3.0 及以上的版本哦~ ------------------正文开始------------------ 开发项目时,经常会需要在不同环境中切换.那么我们如何配 ...

  4. Vue CLI4.0版本正式发布了!一起来看看有哪些新的变化吧

    Vue CLI4.0版本正式发布 这个主要的版本更新主要关注底层工具的必要版本更新.更好的默认设置和其他长期维护所需的微调. 我们希望为大多数用户提供平稳的迁移体验. Vue CLI v4提供了对Ni ...

  5. Vue 2.0 右键菜单组件 Vue Context Menu

    Vue 2.0 右键菜单组件 Vue Context Menu https://juejin.im/entry/5976d14751882507db6e839c

  6. OkGo3.0 --真实项目使用和二次封装(转)

    转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480  11.OkGo3.0真实项目使用和二次封装: ====  11.OkG ...

  7. vue cli4.0 快速搭建项目详解

    搭建项目之前,请确认好你自己已经安装过node, npm, vue cli.没安装的可以参考下面的链接安装. 如何安装node? 安装好node默认已经安装好npm了,所以不用单独安装了. 如何安装v ...

  8. 基于vue的脚手架开发与发布到npm仓库

    什么是脚手架 在项目比较多而且杂的环境下,有时候我们想统一一下各个项目技术栈或者一些插件/组件的封装习惯,但是每次从零开发一个新项目的时候,总是会重复做一些类似于复制粘贴的工作,这是一个很头疼的事情, ...

  9. Vue:对axios进行简单的二次封装

    主要做3点: 1.配置一个请求地址前缀 2.请求拦截(在请求发出去之前拦截),给所有的请求都带上 token 3.拦截响应,遇到 token 不合法则报错 // 对 axios 的二次封装 impor ...

随机推荐

  1. windows下面同时部署多个tomcat的方法

    下面我们把配置的详细过程写在下面,以供参考:(此例以配置三个Tomcat为例)1. 下载apache-tomcat-7.0.63,下载下来的文件为apache-tomcat-7.0.63.zip.2. ...

  2. [Kubernetes] Pod Health

    Kubernetes relies on Probes to determine the health of a Pod container. A Probe is a diagnostic perf ...

  3. Cookie实现记住密码代码

    jsp页面 <%-- Created by IntelliJ IDEA. User: 60590 Date: 2019/11/28 Time: 14:10 To change this temp ...

  4. AtomicIntegerFieldUpdater字段原子更新类

    本文链接:https://blog.csdn.net/anLA_/article/details/78662383前面讲的两个AtomicInteger和AtomicIntegerArray,这两个都 ...

  5. BZOJ 3625:小朋友和二叉树 多项式开根+多项式求逆+生成函数

    生成函数这个东西太好用了~ code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s&q ...

  6. Windows系统错误处理机制

    一.什么是错误 意为意为不正确,与正确答案相反.我们这里讲的是Windows操作系统里进程运行时产生的错误.对我们程序员来说,其实也就是我们编程过程中,调用Windows系统提供的API.COM 接口 ...

  7. 系统字体放大导致rem布局错乱,解决方案,已通过测试

    如果你用rem没遇到过坑,那只能说明你 too young too simple; (function (doc, win) { var resizeEvt = 'orientationchange' ...

  8. 转载:Spark GraphX详解

    1.GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求. ...

  9. 《挑战30天C++入门极限》图例实解:C++中类的继承特性

        图例实解:C++中类的继承特性 整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中 ...

  10. [线段树]洛谷P5278 算术天才⑨与等差数列

    题目描述 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k ...