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 相关文章推荐
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
Aug 28 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
Apr 12 Javascript
myFocus slide3D v1.1.0 使用方法与下载
Jan 12 Javascript
基于javascript滚动图片具体实现
Nov 18 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
js实现发送验证码后的倒计时功能
May 28 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
AngularJS中isolate scope的用法分析
Nov 22 Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 Javascript
JavaScript实现留言板案例
Mar 17 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守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
php文本转图片自动换行的方法
2013/03/13 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
PHP验证码函数代码(简单实用)
2013/09/29 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python实现从订阅源下载图片的方法
2015/03/11 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
浅析python参数的知识点
2018/12/10 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
机关会计岗位职责
2014/04/08 职场文书
幼儿园安全责任书
2014/04/14 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书