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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(4)
Dec 23 Javascript
Javascript中产生固定结果的函数优化技巧
Jan 16 Javascript
Node.js 的异步 IO 性能探讨
Oct 08 Javascript
node.js中的fs.lchmod方法使用说明
Dec 16 Javascript
jQuery垂直多级导航菜单代码分享
Aug 18 Javascript
JavaScript编程中window的location与history对象详解
Oct 26 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
Vue传参一箩筐(页面、组件)
Apr 04 Javascript
使用jQuery如何写一个含验证码的登录界面
May 13 jQuery
详解Vue-Router源码分析路由实现原理
May 15 Javascript
详解JavaScript作用域、作用域链和闭包的用法
Sep 03 Javascript
JavaScript实现随机点名小程序
Oct 29 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
JMenuTab简单使用说明
2008/03/13 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
python实现进程间通信简单实例
2014/07/23 Python
复习Python中的字符串知识点
2015/04/14 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
Django中间件基础用法详解
2019/07/18 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
小型女装店的创业计划书
2014/01/09 职场文书
单位提档介绍信
2014/01/17 职场文书
中青班党性分析材料
2014/02/16 职场文书
临床护理求职信
2014/04/26 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python