vue组件封装成npm包

摘要:
Vue的插件必须提供一个公开方法install,该方法会在你使用该插件,也就是Vue.use时被调用。这样也就给Vue全局注入了你的所有的组件。这时候我们需要借助library和libraryTarget,我们只需要用ES6来编写代码,编译成通用的UMD就交给webpack了  umdNamedDefine:会对UMD的构建过程中的AMD模块进行命名。

以我自己封装的一个npm包为例,用于音频打点切分,展示音频波形图,波形图选区播放等,如下图:vue组件封装成npm包第1张

传送门:

npm:https://www.npmjs.com/package/audio_wave_plugin

github源码:https://github.com/panxiaoxiao0823/audio_wave_plugin

封装过程:

1.初始化vue简单模板:

vue init webpack-simple audio_wave_plugin
cd audio_wave_plugin
npm install
npm run dev

2.创建,目录结构如下:

src/myPlugin目录:如果有多个插件的话规范整理

src/myPlugin/audio_wave目录:当前要封装的组件

vue组件封装成npm包第2张

3.app.vue本地调试该组件,直至没有问题

vue组件封装成npm包第3张

4.修改src/myPlugin/audio_wave/index.js 文件,目的:将该组件作为 Vue 插件

//audioWave 插件对应组件的名字
import audioWave from './audio_wave.vue';

//Vue.js 的插件应当有一个公开方法 install 。第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象//参考:https://cn.vuejs.org/v2/guide/plugins.html#%E5%BC%80%E5%8F%91%E6%8F%92%E4%BB%B6//此处注意,组件需要添加name属性,代表注册的组件名称,也可以修改成其他的
audioWave.install = Vue => Vue.component(audioWave.name, audioWave);//注册组件
export default audioWave;

此处需要注意的是installVue的插件必须提供一个公开方法install,该方法会在你使用该插件,也就是Vue.use(yourPlugin)时被调用。这样也就给Vue全局注入了你的所有的组件。

5.修改配置项

(1)修改 webpack.config.js ,修改完成后执行npm run build 看下是否生效

//执行环境
const NODE_ENV =process.env.NODE_ENV;
console.log("-----NODE_ENV===",NODE_ENV);

module.exports ={
  //根据不同的执行环境配置不同的入口
  entry: NODE_ENV == 'development' ? './src/main.js' : './src/myPlugin/sumFunction/index.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'audio_wave.js',
    library: 'audio_wave', //指定的就是你使用require时的模块名
    libraryTarget: 'umd', //指定输出格式
    umdNamedDefine: true //会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
  },

library:指定的就是你使用require时的模块名

libraryTarget:为了支持多种使用场景,我们需要选择合适的打包格式。常见的打包格式有 CMD、AMD、UMD,CMD只能在 Node 环境执行,AMD 只能在浏览器端执行,UMD 同时支持两种执行环境。显而易见,我们应该选择 UMD 格式。

有时我们想开发一个库,如lodash,underscore这些工具库,这些库既可以用commonjs和amd方式使用也可以用script方式引入。

这时候我们需要借助library和libraryTarget,我们只需要用ES6来编写代码,编译成通用的UMD就交给webpack了

  umdNamedDefine:会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define
(2)修改package.json 文件:
//发布开源因此需要将这个字段改为 false
"private": false,

//这个指 import 的时候它会去检索的路径
"main": "dist/audio_wave.js",

6.提交发布

(1)在npm官网注册账号,地址:https://www.npmjs.com/,注册好之后,注意邮箱要验证,会发送验证链接到你的注册邮箱,没有验证的话是不能发布代码的

(2)package.json 中 author 尽量与 npm 账户一致

(3)项目根目录下,打包之后,登录npm账号,输入用户名、密码、邮箱,npm publish发布

npm run build
npm login npm publish

7.现在其他项目可以安装引用了

npm install audio_wave_plugin --save

//main.js中引入
import audioWave from 'audio_wave_plugin'Vue.use(audioWave)

8.npm包更新迭代方法

(1)新建npm包:

npm login
npm publish

(2)已有npm包,在已有npm包基础上更新版本

npm version <update_type>npm publish

update_type 有三个参数:第一个是patch, 第二个是minor,第三个是major

patch:这个是补丁的意思,补丁最合适;

minor:这个是小修小改;

major:这个是大改咯;

比如原来版本1.0.0

  •   npm version patch //修改为1.0.1
  •   npm version minor //修改为1.1.0
  •   npm version major //修改为2.0.0

封装过程中出现一些问题,现记录如下:

1.其他项目引用时候,main.js中Vue.use()时候报错Uncaught TypeError: Cannot read property ‘toLowerCase‘ of undefined,原因:

源代码中index.js 中注册的组件需要有name属性,代表注册的组件名称;import的文件是vue文件;

免责声明:文章转载自《vue组件封装成npm包》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ADB 你想找的命令都在这里Vue中table表头合并的用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mac 上Tomcat装载

I recently installed Tomcat 7 and got it working with Eclipse Helios on Mac OSX Lion.Install Homebrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"Install T...

Android 设置铃声

在网上找了很多关于铃声设置的,不晓得怎么回事就是没测试通过,后来换了另外一种方式解决了。回过头来看了一下原理是一样的,于是就把两者合并到了一起。原理:首先根据传进来的绝对路径来查询传进来路径的歌曲是否存在,如果存在则得到id和uri,通过ContentUris.withAppendedId(uri,id),将uri和id拼接成一个新的Uri,然后将新的ur...

vue刷新当前路由:router-view 复用组件时不刷新的3种解决方案总结

  vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。   对于路由,不同的路由跳转,vue...

使用vue的v-show和transition制作一个简单轮播图

<template> <!--轮播图--> <div id="carousel"> <transition-group tag="ul" :name="transitionName"> <li v-for="(list,index) in slideList" :key="i...

用vue 写h5页面-摇一摇

  vue配合其他ui框架除了开发一个完整的web项目外,也有不少的项目做一些h5的活动页面开发。你的页面现在需要模拟微信的摇一摇动作。   项目环境: vue-cli 完成的一个项目   准备插件(包):依赖的第三方的插件(后续会完成如何写vue插件的方法)shake.js ,github地址: https://github.com/alexgibson...

vue histroy模式去除#页面刷新访问空白原因以及解决办法

开启history模式: 如果不开启的话,路由默认是hash模式,开启这个模式前端的工作也很简单,如下: mode: 'history' //在路由那里配置一下这个 如图标记1所示 https://www.XXXXX.com/data/#/login // => 就替换成 https://www.XXXXX.com/data/login 先用h...