think in webpack

在学习webpack之前,先问自己几个问题,带着问题学习。

首先webpack是什么?我们为什么要学习webpack?
webpack是一个(自动化)构建工具,所谓自动化,因为构建工具就是让我们不再做重复的事情,解放我们的双手的。

Paste_Image.png

这张图告诉我们webpack可以将所有的前端文件都打包成模块,使用common.js规范(js模块化规范)导入其他功能代码,而不用手动复制代码到你正在写的文件。
那么自动化具体是怎么样的呢? 举个栗子。
平时习惯使用es6语法来写js代码,但是浏览器不支持es6代码,这时我们就要将es6代码转换为es5代码。
<code>
a.es6
var a = () => console.log(this)</code>
执行编译命令
<code>
es6 -c a.es6 //this执行window对象
</code>
得到a.js
<code>
function a () {
console.log(this) //this指向window对象
}
</code>
执行压缩命令
<code>uglify -s a.js -o a.min.js</code>
得到a.min.js
<code>function a(){console.log(this)}</code>
这样我们每次修改代码,或者添加,都要重复输出上面2行命令,极其繁琐,而使用webpack,就自动帮助我们完成这一系列工作。

webpack最基本的功能就是打包模块了,下面来一步步的写一个Demo

建一个空文件夹
cmd进入该文件夹下
输入<code>npm init</code> 会让你选择比如项目名一系列选择,生成的目录package.json是该项目的配置,以及依赖,后面会讲到。
输入<code>npm install webpack</code> 项目安装webpack
新建main.js文件
<code>document.write('mmmmmmmmmmmmm')</code>
新建index.html文件
<pre><!DOCTYPE html>
<html><head>
<title></title>
</head><body><script type="text/javascript" src="bundle.js"></script>
</body>
</html></pre>
这是入口html 他会引入打包后的bundle.js文件
输入<code>webpack main.js bundle.js</code>生成bundle.js文件
最后打开index.html就会显示main.js里的信息。
在我参照一些博客写上述demo的过程中,出现过很多坑,比如说某些文档说的局部安装webpack,在cmd使用打包文件命令时要额外指定webpack在node_modules中的地址,博客主这样写能成功,我却在这里被坑了很久,直接用webpack ... 无需指定位置即可。可能这种情况以后能用上。

webpack高级功能

在写这篇文章之前在项目中遇到了一个问题,在webpack构建的本地服务器中去获取java后台tomcat启动的服务器里的资源的跨域问题。在百度查资料后,发现解决此问题很繁琐,主要涉及到的知识点是webpack webpack-dev-server,虽然网上有配置,但无法通过简单的复制粘贴就能达到目的,只有往深处挖细节,不留死角,一步一步来才能解决问题,而且正好让我可以了解跨域和webpack,知其然更要知其所以然。

构建本地webpack服务器(使用代理解决跨域问题)

cmd进入项目目录
<code>npm install webpack-dev-server //install之后只会出现空的webpack-dev-server文件夹,第二次下载才有内容</code>
之后我按照百度介绍的进入命令行<code>webpack-dev-server</code>即可启动本地webpack服务器,可输出的结果是,命令行不是内部或外部命令。解决方法是 在package.json的scripts对象中添加<code> "start":"webpack-dev-server"</code>然后cmd输入<code>npm start</code>即可启动 。
注意事项:webpack-dev-server需要依赖webpack-dev-middleware
通过npm启动要配置webpack.config.js和package.json 后面会讲到配置问题。
启动服务器默认会进入根目录,需手动在webpack.config.js中配置路径。位置为index.html所在的文件夹
在我最近做的项目里,百度查找的webpack跨域需要在webpack-dev-server配置中解决,但是项目里使用的是webpack-dev-middleware和webpack-hot-middleware,它们俩的效果等同于webpack-dev-server和webpack-dev-middleware。webpack-dev-server已经知道是什么了,现在要了解webpack-hot-middleware的作用与区别。
在我自己的vue+webpack项目中使用的是webpack-dev-middleware和webpack-hot-middleware实现的自动刷新,删除webpack-dev-middleware下载webpack-dev-server再启动就会报错。
好吧!在群里问了一下,问题就解决了。走了很多很多的弯路,但感觉是值得的。至少解决问题是在vue-cli脚手架里固定的配置,我学会了如何自己配置。
自己配置的方法:
在webpack.config.js里
<pre>
module.exports = {
entry:"./main.js",
output:{
filename:"bundle.js"
},
devServer:{
port:'8087', //当前路径是localhost:8087
proxy:{
'/classrooms/*':{
target:'http://localhost:8081', //代理的路径
secure: false
}
}
}
}
</pre>
在项目main.js里写入ajax
<pre>
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET",'/classrooms/100023');
xmlHttp.send(null);
xmlHttp.onreadystatechange = function() {
if ((xmlHttp.readyState == 4)) {
console.log(xmlHttp.responseText)
} else {
alert('fail');
}
}
</pre>
但是该方法在vue-cli搭建的项目里是会报错的,因为vue-cli已经自动生成了代理的配置。
在<code>vue-webpack/config/index.js</code>目录下

Paste_Image.png

<code>/classrooms</code>不需要写完整
例如<code>/classr</code>写成这样,它也会自动匹配请求的url地址为 <code>"/classrooms/" + $(".create-import #classId").val() + "/members"</code>
简单的一行代码,即可完成和上面一样的结果。
在这里<code>console.log(xmlHttp.responseText)出来的是字符串格式的数据,转成json/对象 格式的则需要<code>var x = JSON.parse(xmlHttp.responseText)</code>

解决问题的过程我做起来太复杂了,实际上很简单,该问题告一段落,以后有webpack相关的问题,都在这里解决。

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

推荐阅读更多精彩内容

  • 构建一个小项目——FlyBird,学习webpack和react。(本文成文于2017/2/25) 从webpac...
    布蕾布蕾阅读 16,798评论 31 98
  • webpack 介绍 webpack 是什么 为什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert阅读 6,440评论 2 71
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,270评论 4 31
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,138评论 7 35
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,428评论 1 32