一步两步三步开始自己的vue插件库(webpack配置)

作为程序员,更加需要理想坚定与坚持

文/ziven
标题图/来自网络

有时候,开发过程中,有意无意都会慢慢有自己的一些积累,比如说写了一个动画组件,或者写了一个比较漂亮,体验比较好的插件。这时候我们都希望无差别的在以后的工作中能够即时的使用这些我们曾经做过的东西。把开发过的组件发布到npm 是个不错的方式。

本坑在开发vue项目中也有类似的经历,但是对webpack打包模块化不是很清楚,如果觉得头痛webpack的配置,在开发过程中不妨先把webpack放一边,先看看npm publish,直接调用vue文件,以此一步步增强了解整个发布开发组件过程。

这种方式简单粗暴,首先指定一个目录,执行<pre>npm init</pre>这时候就会出现如下图情况反馈


npm init 过程提示

如果觉得每个选项不知道回答什么,就一直回车就好,最后在文件夹中会多出一个package.json.这里直接给出整个package.json
<pre>{
"name": "vuetest",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC"
}</pre>
它已经有了主入口文件main.js,如果没有,手动添加,这里把自己要用的vue插件替换掉index.js,比如我的是transform.vue 一个3d显示的图片的插件,就换成 “main”:"transform.vue" ,组件放在与package.json 同级目录下。
执行发布前必须要登录,要有自己的账号,这里不再说了,找到npm官网进行注册 ,npm发布不能使用淘宝镜像,发布可能无法成功,这时候设置为npm默认配置就行,如下
<pre>npm config set registry http://registry.npmjs.org </pre>

以上是最简单的npm发布组件,并且直接使用vue文件,很显然是没有扩展性的。这时候没有webpack不行,它可以对vue进行整理编译,模块化成js文件,webpack的配置可以兼容多种应用方式。对于不太清楚webpack到底是啥,配置项有哪些的,其实不要忙着马上去上手配置插件,往往会造成很多弯路。先要搞清楚来龙去脉才是重要的。

webpack与gulp区分与理解

很多初学者有些疑惑这两者的区别,包括我在内,往往都用鱼和熊掌来比喻两者,所以很多人都惯性认为他们的目标是一样的。其实两者是可以同时使用在一个项目之中的。它们有不一样的重点,也有不一样的工作方式,具体目标也并不相同,拿来进行比较是不太正确的。

webpack最大的特点就是模块化打包,这是最大的特点,当我们开发的组件越来越多时,它可以满足我们进行有条件,有选择的加载某些模块。当然它也可以压缩我们要打包的文件了。

gulp就是自动化构建工具,所谓自动化,就是什么都不用管,它自动去完成,像比如说自动压缩图片,合并图片,合并样式,编译less,等等,本坑还没有认真学习它,也只是大概的了解,据我所知,他在压缩文件上有很多花样,以后将会出个专题讨论它。
所以总的来说,Gulp是一个工具,而webpack是模块化技能与方法于一身的'物件'。Gulp可以使用webpack插件等诸多插件来进行自动化效果,从而达到多者插件并用的效果

module.export之前发生了什么

打开我的vue库地址,我们来看看三个要注意的文件,其中前两个更加重要一些。webpack配置文件。webpack配置的入口文件,运行这些配置将导出最后的打包文件
入口文件中看到module.export导出了我们写得模块。

那么为啥export后就能在别处使用呢?我不禁要问。于是我就去找导出来的是什么?下面就是我找到的答案。

其实如果不用webpack打包,不结合加载器,export出来的还是vue(可以实际操作以下),很显然这是不能用在没有vue构建环境之下的。因为没有vue-loader,vue得不到解析。vue是html,css,js 的结合体,通过webpack打包,webpack有诸多loader,其中vue-loader就是能够解释vue并且导出三个不同的部分,然后给其他的loader继续处理。而到了module.export出来的是按照一种格式形成的模块。这个模块可以require,可以import,可以在html中js,css 直接引用等等达到加载这些模块。这样说起来心里是不是有些数了呢?还是更迷糊了呢?

一步两步的构建自己的插件库

不懂的我,从vue-cli本身的webpack配置开始
第一步,vue-cli 脚手架搭建vue项目
第二步,复制黏贴自己要发布的vue组件,放到components里,我的是transform.vue,一个3d随鼠标显示图片的插件。packjson设置main属性为dist/xxxxxx.js,src文件写好webpack的入口文件js,内容可以看本坑github的例子。把webpack.base.conf.js内容复制到自己的webpack文件中,进行简单修改,比如说里面一些路径改下,其他可以不改。
第三步,执行webpack ,打包完成了。
新建个demo文件夹,可以看到是否可以使用,正常使用
这些都是大致的打包,打包配置将在今后进行不断改进。

插件库目录
(课外关键题)--打包格式中的‘小学问’

上面说到经过webpack后export导出了一定格式的模块或者多个模块文件。这个格式就是CommonJS。那么要问了,打包格式有哪些呢?说起来,大概以下几种,commonjs,cmd,amd,umd。下面是对他们的基本解释。

CommonJS:js 模块化的目的是为了逻辑清楚,复用方便,commonjs就是在这样的需求下诞生的模块化规范。我们在nodejs开发的实际代码中看到require,export,module就是其语法定义。这样说来nodejs,npm就是采用了commonjs,但是nodejs也加了其他东西,并非都是commonjs一家构成。
AMD:然而commonjs不是万能的,因为它的致命缺点之一就是没办法在浏览器中引用,为什么呢?举个例子,它的require如果运用到浏览器,网络的高延时很可能让require加载失败,不像服务器可以冲本地require。那怎么办呢?异步加载呗!这就是AMD出现原因,它的全名翻译是异步模块定义(define(['dep1','dep2'],function(dep1,dep2){...});),熟悉require.js对AMD就再了解不过了。
CMD:CMD是AMD的变种,有些不同,都在传送门里,
UMD:同时以 AMD、CommonJS2 和全局属性形式输出。

webpack中output.libraryTarget,它的支持有以下几种

“var” - 以一个变量形式输出: var Library = xxx (default);
“this” - 以 this 的一个属性输出: this[“Library”] = xxx;
“commonjs” - 以 exports 的一个属性输出:exports[“Library”] = xxx;
“commonjs2” - 以 module.exports 形式输出:module.exports = xxx;
“amd” - 以 AMD 格式输出;
“umd” - 同时以 AMD、CommonJS2 和全局属性形式输出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容

  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,279评论 4 31
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,679评论 7 110
  • 前言 webpack2和vue2已经不是新鲜东西了,满大街的文章在讲解webpack和vue,但是很多内容写的不是...
    技术宅小青年阅读 6,521评论 4 43
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,147评论 7 35
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,433评论 1 32