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 post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
Oct 09 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
详解Angular2响应式表单
Jun 14 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
js使用html2canvas实现屏幕截取的示例代码
Aug 28 Javascript
详解如何更好的使用module vuex
Mar 27 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 Javascript
JavaScript实现拖拽效果
Mar 16 Javascript
springboot+vue实现文件上传下载
Nov 17 Vue.js
JavaScript对象访问器Getter及Setter原理解析
Dec 08 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
深入解析yii权限分级式访问控制的实现(非RBAC法)
2013/06/13 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
初识php MVC
2014/09/10 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
python如何导入依赖包
2020/07/13 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
网络安全方面的面试题
2015/11/04 面试题
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
一年级家长会邀请函
2014/01/25 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
动员大会主持词
2014/03/20 职场文书
主题团日活动总结
2014/06/25 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
2015年社区工作总结
2015/04/08 职场文书
道歉短信大全
2015/05/12 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python