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 相关文章推荐
身份证号码前六位所代表的省,市,区, 以及地区编码下载
Apr 12 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
jQuery.trim() 函数及trim()用法详解
Oct 26 Javascript
Bootstrap每天必学之附加导航(Affix)插件
Apr 25 Javascript
8 行 Node.js 代码实现代理服务器
Dec 05 Javascript
JS实现的样式切换功能tableCSS实例
Dec 30 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
微信域名检测接口调用演示步骤(含PHP、Python)
Dec 08 Javascript
Vue+webpack实现懒加载过程解析
Feb 17 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 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
一个好用的分页函数
2006/11/16 PHP
使用PHP开发留言板功能
2019/11/19 PHP
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
jQuery+json实现动态创建复杂表格table的方法
2016/10/25 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python BeautifulSoup使用方法详解
2013/11/21 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python3.7 sys模块的具体使用
2019/07/22 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
《雪儿》教学反思
2014/04/17 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
大学生在校表现评语
2014/12/31 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
MySQL创建表操作命令分享
2022/03/25 MySQL