自定义Vue组件打包、发布到npm及使用教程


Posted in Javascript onMay 22, 2019

本文将帮助:将自己写的Vue组件打包到npm进行代码托管,以及正常发布之后如何使用自己的组件。

本文讲述的仅仅是最基础的实现,其他复杂的操作需要非常熟悉webpack的相关知识,作者将继续学习。

按照大佬文中写的一步步操作,够细心的话基本可以一步到位。下面总结一下发布步骤:

1. 利用Vue的脚手架新建一个简易版的Vue项目my-project:

vue init webpack-simple my-project -> cd my-project -> npm i -> npm run dev

2. 编写组件:

src下新建myPlugin文件夹用于存放所以开发的组件 -> 为每一个组件创建一个文件夹,其中存放一个vue组件文件和一个index.js配置文件 -> 在myPlugin下的最外层创建一个入口配置文件 -> 为每个人vue组件文件中加上一个name属性

3. 测试组件:

在app.vue中测试一下自己的组件可不可以用

4. 编写配置文件

为刚刚加入的每个组件文件夹中的index.js放入如下代码:(其中ldcPagination为组件名)

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

为myPlugin下index.js放入如下代码:(其中ldcPagination为组件名,多个组件直接在components数组中加入并在最后输出出来就行)(引入的公共样式文件等都可以放这个文件中)

import ldcPagination from './Pagination/index.js';
const components = [
 ldcPagination
]
const install = function(Vue, opts = {}) {
 components.forEach(component => {
  Vue.component(component.name, component);
 });
}
if (typeof window !== 'undefined' && window.Vue) {
 install(window.Vue);
}
export default {
 install,
 ldcPagination
}

5. 改写webpack.config.js配置文件

将其中的输入输出换成如下代码:

var path = require('path')
var webpack = require('webpack')
const NODE_ENV = process.env.NODE_ENV;
module.exports = {
//entry: './src/main.js',
//output: {
//  path: path.resolve(__dirname, './dist'),
//  publicPath: '/dist/',
//  filename: 'build.js'
// },
  entry: NODE_ENV == 'development' ? './src/main.js' : './src/myPlugin/index.js',
  output: {
   path: path.resolve(__dirname, './dist'),
   publicPath: '/dist/',//路径
   filename: 'ldc-ui.js',//打包之后的名称
   library: 'ldc-ui', // 指定的就是你使用require时的模块名
   libraryTarget: 'umd', // 指定输出格式
   umdNamedDefine: true // 会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
  },
...
}

6. 发布前准备

改写package.json中的private为false,加入"main": "dist/ldc-ui.js", 其他的自定义 -> 新建.npmignore文件忽略不需要上传的文件如.* *.md *.yml build/ node_modules/ src/ test/

7. 发布

npm run build 打包 -> 注册npm账号 -> npm login 登录 -> npm publish 发布

可能出现问题:

1. 登录源错误, npm config get registry 可查看当前登录源,npm config set registry=http://registry.npmjs.org 可切换到正确的登录源

2. 版本号不能重复

3. 图片资源打包后无法使用,所以自己的组件中不要使用

使用组件方式:

1. npm i xxx -D

2. import XXX from 'xxx'

3. const { A, B } = XXX

4. 在Vue中注册 components: { A, B }

总结

以上所述是小编给大家介绍的自定义Vue组件打包、发布到npm及使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
深入理解Javascript作用域与变量提升
Dec 09 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
jquery动态添加删除(tr/td)
Feb 09 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
Feb 28 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
浅谈JavaScript中的分支结构
Jul 01 Javascript
jQuery数组处理函数整理
Aug 03 Javascript
AngularJS模板加载用法详解
Nov 04 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
Apr 22 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
May 07 Javascript
javascript高仿热血传奇游戏实现代码
Feb 22 Javascript
Vue的路由及路由钩子函数的实现
Jul 02 Javascript
Vue中的组件及路由使用实例代码详解
May 22 #Javascript
Vue侦测相关api的实现方法
May 22 #Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 #Javascript
微信小程序系列之自定义顶部导航功能
May 21 #Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
May 21 #Javascript
微信小程序websocket实现即时聊天功能
May 21 #Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
May 21 #Javascript
You might like
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
Node.js模块加载详解
2014/08/16 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
vue加载完成后的回调函数方法
2018/09/07 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
Python中join和split用法实例
2015/04/14 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
学校安全教育制度
2014/01/31 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
计算机专业应届生求职信
2014/04/06 职场文书
解除财产保全担保书
2014/05/20 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
公司委托书怎么写
2014/08/02 职场文书
升学宴来宾致辞
2015/07/27 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
Python中字符串对象语法分享
2022/02/24 Python