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的地址栏射击游戏代码
Mar 10 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
Oct 11 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
浅谈被jQuery抛弃的函数及替代函数
May 03 Javascript
jQuery弹出层插件popShow用法示例
Jan 23 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
详解vue中computed 和 watch的异同
Jun 30 Javascript
详解webpack + vue + node 打造单页面(入门篇)
Sep 23 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
Aug 24 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
详解vue组件之间的通信
Aug 30 Javascript
Vue获取微博授权URL代码实例
Nov 04 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 删除记录实现代码
2009/03/12 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
Using the TextRange Object
2006/10/14 Javascript
JavaScript基本对象
2007/01/11 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
Python下Fabric的简单部署方法
2015/07/14 Python
python并发编程 Process对象的其他属性方法join方法详解
2019/08/20 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
python小白切忌乱用表达式
2020/05/29 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
浪费资源的建议书
2014/03/12 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
公司户外活动总结
2014/07/04 职场文书
小学庆六一主持词
2015/06/30 职场文书
初中毕业生感言
2015/07/31 职场文书
优秀创业计划书分享
2019/07/19 职场文书
MySQL 数据表操作
2022/05/04 MySQL