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 相关文章推荐
分享20款好玩的jQuery游戏
Apr 17 Javascript
JS 实现图片直接下载示例代码
Jul 22 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
Nov 09 Javascript
Bootstrap基本布局实现方法详解
Nov 25 Javascript
Vuejs 页面的区域化与组件封装的实现
Sep 11 Javascript
基于JavaScript实现抽奖系统
Jan 16 Javascript
详解Vue取消eslint语法限制
Aug 04 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
Nov 13 Javascript
vuex state中的数组变化监听实例
Nov 06 Javascript
javascript Canvas动态粒子连线
Jan 01 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
Aug 10 Javascript
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
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
PHP文件下载类
2006/12/06 PHP
PHP翻页跳转功能实现方法
2020/11/30 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
vuex 中插件的编写案例解析
2019/06/10 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
python实现日志按天分割
2019/07/22 Python
Python tkinter三种布局实例详解
2020/01/06 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
params有什么用
2016/03/01 面试题
幼儿园毕业家长感言
2014/02/10 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
CSS基础详解
2021/10/16 HTML / CSS
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript