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 相关文章推荐
javascript 新浪背投广告实现代码
Jul 07 Javascript
JS简单的图片放大缩小的两种方法
Nov 11 Javascript
javascript贪吃蛇完整版(源码)
Dec 09 Javascript
对之前写的jquery分页做下升级
Jun 19 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 Javascript
jQuery实现dialog设置focus焦点的方法
Jun 10 Javascript
javascript封装简单实现方法
Aug 11 Javascript
ionic2打包android时gradle无法下载的解决方法
Apr 05 Javascript
详解Vue爬坑之vuex初识
Jun 14 Javascript
JS实现获取word文档内容并输出显示到html页面示例
Jun 23 Javascript
layui 实现表格某一列显示图标
Sep 19 Javascript
JavaScript实现滑块验证解锁
Jan 07 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
php 字符串替换的方法
2012/01/10 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
js实现自定义路由
2017/02/04 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
Vue数组更新及过滤排序功能
2017/08/10 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
Javascript实现异步编程的过程
2018/06/18 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
启动一个线程是用run()还是start()
2016/12/25 面试题
销售副总经理岗位职责
2013/12/11 职场文书
财务会计专业个人求职信范本
2014/01/08 职场文书
个人培训自我鉴定
2014/03/28 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书