Vue插件打包与发布的方法示例


Posted in Javascript onAugust 20, 2018

插件打包与发布

插件功能开发完成后,若需要发布到公共组件库中(例如:npmjs),需要对插件进行打包并发布,简单说明一下这个过程,以插件名 dialog 为例

1、创建 dialog 目录,并进入

2、运行命令行,初始化项目,生成 package.json

npm init -y

3、使用 webpack-simple 模板构建项目基本结构(前提为已自行安装好 vue-cli)

vue init webpack-simple

根据导航提示,设置好项目后,基本结构生成完成

4、删除无用内容   删除 index.html 和 src 目录下的所有文件

5、复制插件内容到 src 目录中

6、修改 package.json 配置内容

{
 "name": "dialog",
 "description": "the dialog plguin",
 "version": "1.0.0",
 "author": "TerryZ <terry5@foxmail.com>",
 "license": "MIT",
 //删除原有的"priveate": true,发布到公共库的项目,不能设置该参数
 //增加 main 配置,设置插件在安装后的主入口文件
 "main": "dist/dialog.js",
 "scripts": {
  "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
  "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
 },
 "dependencies": {
  "vue": "^2.5.11"
 },
 //增加插件关键字描述,非必须,按需设置
 "keywords": [
  "front-end",
  "javascript",
  "dialog",
  "vue",
  "vuejs"
 ],
 "browserslist": [
  "> 1%",
  "last 2 versions",
  "not ie <= 8"
 ],
 "devDependencies": {
  "babel-core": "^6.26.0",
  "babel-loader": "^7.1.2",
  "babel-preset-env": "^1.6.0",
  "babel-preset-stage-3": "^6.24.1",
  "cross-env": "^5.0.5",
  "css-loader": "^0.28.7",
  "file-loader": "^1.1.4",
  "node-sass": "^4.5.3",
  "sass-loader": "^6.0.6",
  "vue-loader": "^13.0.5",
  "vue-template-compiler": "^2.4.4",
  "webpack": "^3.6.0",
  "webpack-dev-server": "^2.9.1"
 }
}

7、修改 webpack.config.js 的 output 部分配置

output: {
  path: path.resolve(__dirname, './dist'),
  publicPath: '/dist/',
  //修改输出打包后的脚本文件名,该文件即是 package.json 中配置的 main 属性的对应文件
  filename: 'dialog.js',
  //增加以下库配置信息
  library: 'Dialog',
  libraryTarget: 'umd',
  umdNamedDefine: true
}

8、安装库,国内环境建议使用 cnpm 安装速度会快些

npm install -g cnpm --registry=https://registry.npm.taobao.org

9、编译插件

npm run build

10、发布插件,确定你的插件名当前公共库中不存在,否则会发布失败

npm publish

图片资源打包

插件中使用到的图片资源,在打包后,根据模板的默认配置,会将图片资源输出到 dist 目录中,此时就有图片引用路径问题。在样式内容中会发现原来设置的

background-image:url('../image/a.jpg')

会转换成

background-image:url('/dist/a.jpg')

实际的完整路径即是

http://xxx.com/dist/a.jpg

我们知道插件在安装后,会统一安装在 node_modules 目录中,这样的目录显然是不正确的

一种折中的办法,就是将图片资源转换成 base64 编码,不生成实体图片

webpack-simple 中默认使用 file-loader 来处理图片,这里换成 url-loader,两者的区别在于后者是前者的功能封装,还增加了将图片编码为 base64 的功能,所以可以放心使用

安装 url-loader

npm i url-loader --save-dev

webpack 配置修改(webpack-simple 模板)

module.exports = {
 ...
 module: {
  rules: [
   {...},
   {
    test: /\.(png|jpg|gif|svg)$/,
    loader: 'url-loader',
    options: {
     limit: 30000,
     name: '[name].[ext]?[hash]'
    }
   }
  ]
 },
 ...
}

上面的配置中,将原 file-loader 更换了 url-loader,并增加 limit 参数,该参数设置了图片容量在小于指定容量(上例设置为30kb)时,不会转换成 base64

如此调整配置后,再运行编译

npm run build

会发现编译到 dist 目录中的内容已经没有图片文件,只有编译完成的 build.js 和对应的 map 文件,所以在插件开发时,尽可能使用 CSS 处理样式,需要使用到图片或图标资源,尽可能也使用图片尺寸小的图片,方便打包处理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
JavaScript 学习技巧
Feb 17 Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
javascript延时加载之defer测试
Dec 28 Javascript
jQuery动画animate方法使用介绍
May 06 Javascript
jQuery实现自定义下拉列表
Jan 05 Javascript
JavaScript数据结构与算法之栈与队列
Jan 29 Javascript
sso跨域写cookie的一段js脚本(推荐)
May 25 Javascript
js css实现垂直方向自适应的三角提示菜单
Jun 26 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 #Javascript
解决jquery有正确返回值但不执行success函数的问题
Aug 20 #jQuery
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
Aug 20 #Javascript
Vue2.0生命周期的理解
Aug 20 #Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 #Javascript
RequireJS用法简单示例
Aug 20 #Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 #Javascript
You might like
神族 Protoss 剧情介绍
2020/03/14 星际争霸
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
React Hooks的深入理解与使用
2018/11/12 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Python实现仿射密码的思路详解
2020/04/23 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
悬挂训练绳:TRX
2017/12/14 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
酒店服务实习自我鉴定
2013/09/22 职场文书
面试求职的个人自我评价
2013/11/16 职场文书
体育教育毕业生自荐信
2013/11/21 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
初中英语课后反思
2014/04/25 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书