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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
JS模板实现方法
Apr 03 Javascript
给js文件传参数(详解)
Jul 13 Javascript
JavaScript避免内存泄露及内存管理技巧
Sep 05 Javascript
jquery操作 iframe的方法
Dec 03 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
angularjs封装$http为factory的方法
May 18 Javascript
微信小程序之选项卡的实现方法
Sep 29 Javascript
微信小程序之圆形进度条实现思路
Feb 22 Javascript
vue 实现websocket发送消息并实时接收消息
Dec 09 Javascript
JS检测浏览器开发者工具是否打开的方法详解
Oct 02 Javascript
JavaScript中document.activeELement焦点元素介绍
Nov 27 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
php代码把全角数字转为半角数字
2007/12/10 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
JavaScript实现的拼图算法分析
2019/02/13 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
简洁的十分钟Python入门教程
2015/04/03 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
在django中,关于session的通用设置方法
2019/08/06 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
TCP/IP模型的分界线
2012/12/01 面试题
2015年三万活动总结
2015/03/25 职场文书
海底两万里读书笔记
2015/06/26 职场文书
结婚典礼主持词
2015/06/29 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android