vue制作toast组件npm包示例代码


Posted in Javascript onOctober 29, 2020

之前写了一个ui组件,但是感觉没必要的东西太多了,所以做了一下优化

介绍

之前制作的小组件是用webpack-simple搭建的,但是左思右想感觉没必要的东西太多太多,所以又写了一个清洁版的,直接开整

开始

建立一个空文件夹, 然后直接终端运行 npm init
建立完之后会生成一个 package.json 文件,内容如下

vue制作toast组件npm包示例代码

注意:name是之后要发的npm包的名字 不要重名,建议去npm先搜一下有没有在取

接下来对 package.json 文件添加所需模块,

{
 "name": "sever-ui",
 "version": "1.0.0",
 "description": "一个移动端ui小组件",
 "main": "index.js",
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "start": "webpack-dev-server --hot --inline",
  "build": "webpack --display-error-details --config webpack.config.js"
 },
 "author": "sever27",
 "license": "ISC",

 "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-polyfill": "^6.26.0",
    "babel-preset-es2015": "^6.24.1",
    "css-loader": "^0.28.7",
    "es6-promise": "^4.1.1",
    "vue": "^2.5.9",
    "vue-hot-reload-api": "^2.2.4",
    "vue-html-loader": "^1.2.4",
    "vue-style-loader": "^3.0.3",
    "vue-template-compiler": "^2.5.9",
    "webpack": "^3.9.1",
    "webpack-dev-server": "^2.9.5"
 }
}

配置修改完成之后 终端运行 npm install 安装依赖。

接着在目录下创建文件夹 src及文件等,这是我的目录结构

vue制作toast组件npm包示例代码

对应文件内容
src/main.vue

<template>
 <div v-if="visible" class="sever-toast">
   <span class="toast-msg" >{{msg}}</span>
 </div>
</template>
<script>
export default {
 name:"sever-toast",
 data(){
  return {
   visible:false,
   msg:'默认值',
   duration:'3000',
  }
 },
 methods:{
  close(){
   setTimeout(() => {
    this.visible = false;
   }, this.duration);

  }
 },
 mounted(){
 }
}
</script>
<style >
 .sever-toast{
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
  position: fixed;
  top:0;
  bottom:0;
  left:0;
  right:0;
 }
 .toast-msg{
  color: #ffffff;
  background:rgba(0,0,0,0.5);
  padding:0.3rem;
  border-radius: 0.1rem;
  font-size: 0.34rem;
 }
</style>

src/main.js

import Vue from 'vue';
import Main from './main.vue'
let MmToast = Vue.extend(Main);

let instance ;

const Toast = function(options) {
 instance = new MmToast({
  data: options
 });
 instance.$mount();
 document.body.appendChild(instance.$el);
 instance.visible = true;

 return instance.close()
}

export default Toast

Toast/index.js

import Toast from './src/main.js'
export default Toast

index.js

import Toast from './Toast/index.js' 

const install = function(Vue) {

 Vue.prototype.$toast = Toast

}
console.log(typeof window !== 'undefined' , window.Vue)

if (typeof window !== 'undefined' && window.Vue) {
 install(window.Vue);
}

export default {
 install,
 Toast,
}

接下来修改webpack.dev.conf.js

const path = require("path");
const webpack = require("webpack");
const uglify = require("uglifyjs-webpack-plugin");

module.exports = {
  devtool: 'source-map',
  entry: "./src/index.js",//入口文件,src目录下的index.js文件,
  output: {
    path: path.resolve(__dirname, './dist'),//输出路径,就是新建的dist目录,
    publicPath: '/dist/',
    filename: 'sever-ui.min.js',
    libraryTarget: 'umd',
    umdNamedDefine: true
  },
  module: {
    rules: [{
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.less$/,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" },
          { loader: "less-loader" }
        ]
      },
      {
        test: /\.js$/,
        exclude: /node_modules|vue\/dist|vue-router\/|vue-loader\/|vue-hot-reload-api\//,
        loader: 'babel-loader'
      },
      {
        test: /\.(png|jpg|gif|ttf|svg|woff|eot)$/,
        loader: 'url-loader',
        query: {
          limit: 30000,
          name: '[name].[ext]?[hash]'
        }
      }
    ]
  },
  plugins: [
    new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: JSON.stringify("production")
      }
    })
  ]
}

好了 一个简单的toast组件已经完成了
接下来是打包 执行 npm run build 生成文件

vue制作toast组件npm包示例代码

接着修改package.json

"main":"./dist/sever-ui.min.js",

然后我们就可以上传到npm了
执行

npm login
npm publish

接下来让我们看看效果

npm install sever-ui

引入

vue制作toast组件npm包示例代码

<template>
 <div class="home">
  <div @click="Toast()">点击Toast</div>
 </div>
</template>

<script>

export default {
 name: 'Home',
 components: {
 },
 methods:{
  Toast(){
   this.$toast({msg:'哈哈哈哈哈哈'})
  }
 }
}
</script>

vue制作toast组件npm包示例代码

修改

优化

只是一个toast感觉直接输入内容,所以做了一下修改
main.js

import Vue from 'vue';
import Main from './main.vue'
let MmToast = Vue.extend(Main);

let instance ;

const Toast = function(options) {
 if( typeof options === 'string'){
  options = {
   msg:options
  }
 }
 instance = new MmToast({
  data: options
 });
 instance.$mount();
 document.body.appendChild(instance.$el);
 instance.visible = true;

 return instance.close()
}

export default Toast

这样 就可以直接使用 this.$toast('toast内容')

到此这篇关于vue制作一个toast组件npm包的文章就介绍到这了,更多相关vue toast组件npm包内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
Aug 12 Javascript
学习JavaScript设计模式之享元模式
Jan 18 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
jquery实现右侧栏菜单选择操作
Mar 04 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
Bootstrap表单布局样式源代码
Jul 04 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
AngularJS表单验证功能
Oct 19 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
node.JS路径解析之PATH模块使用方法详解
Feb 06 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 #Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 #Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 #Javascript
解决ant Design中Select设置initialValue时的大坑
Oct 29 #Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
Oct 29 #Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
Oct 29 #Javascript
解决ant Design Search无法输入内容的问题
Oct 29 #Javascript
You might like
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
prototype Element学习笔记(篇一)
2008/10/26 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
jQuery参数列表集合
2011/04/06 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
简单的分页代码js实现
2016/05/17 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python线程锁(thread)学习示例
2013/12/04 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python贪心算法实例小结
2018/04/22 Python
在python shell中运行python文件的实现
2019/12/21 Python
大学同学聚会邀请函
2014/01/19 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
工作作风建设心得体会
2014/10/22 职场文书
水电工程师岗位职责
2015/02/13 职场文书