webpack学习

webpack简介

webpack是一种模块化方案,将JS、CSS和图片等资源都当做模块来处理。提供一个入口文件,它会把该文件以及该文件所依赖的其他模块都打包成一个文件。

在模块化这个角度,与requireJS有点相像,不同的是requireJS是AMD模式的,相当于是在浏览器中增加了一个AMD解释器,这样浏览器就可以识别require

define

等标识,而webpack支持commonJS、AMD以及ES6,并且是预编译的,提前就转成了浏览器可以识别的语言。

此外,webpack还提供了gulp等前端构建工具的功能,例如SASS等的预处理、压缩打包等前端流程化的功能。

安装webpack就不说了,用npm非常简单,主要对配置文件进行一下解读吧,当运行命令webpack

(前提是全局安装了)后,默认就是查找该文件,当然你也可以通过webpack --config <文件名>

来运行别的配置文件。

<a name="t1" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>webpack.config.js

文件使用说明

该文件中要使用commonjs风格。先将webpack引进来:

var webpack = require('webpack');

需要使用module.exports = {}

来导出具体的配置项。配置选项中通常包括以下一些内容:

<a name="t2" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>context

为entry指定base directory ,需使用绝对路径,如果设置了该项,那么entry需要使用相对路径,相对于base directory:

context: __dirname + '/src',
entry: {
      main: './js/main.js',
      vendor: ['./js/a.js', './js/b.js']
},

<a name="t3" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>entry

其值可以是:

  • 字符串

    当只有一个入口文件

  • 数组

    数组中的所有文件都会被加载,最后一个文件将被输出(其他文件都合并到该文件中),如果output

    中没有命名或采用[name]

    的形式来命名,会输出文件main.js

  • 对象

    采用该方式可以设置多个入口文件,这样在页面中进行相应的引用就行了。输出的文件名是entry对象中的key值。

entry: {
    main: './js/main.js',
    vendor: ['./js/a.js', './js/b.js']
}

<a name="t4" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>output

配置输出文件。

filename

可以使用[name][hash]

[chunkhash]作为输出文件的名字:

output: {
    filename: '[hash].js' //或'[name].js'或'[name]-[hash].js'
}

如果entry不是对象,则这里的[name]

值就是main

.注意此处的hash

值是指整体编译一次的值,而不是每个文件单独改变编译后的值,[chunkhash]

才是每个chunk自己的hash值。

path

输出文件的位置,需要是绝对路径。

publicPath

官网上是这么解释的:

The publicPath specifies the public URL address of the output files when referenced in a browser. For loaders that embed <\script> or <\link> tags or reference assets like images, publicPath is used as the href or url() to the file when it’s different than their location on disk (as specified by path). This can be helpful when you want to host some or all output files on a different domain or on a CDN. The Webpack Dev Server also uses this to determine the path where the output files are expected to be served from. As with path you can use the [hash] substitution for a better caching profile.

解释一下就是,path指的输出文件要放到磁盘中哪个位置,而publicpath是指浏览器或者webpack dev server从哪里获取一些如图片、chunks等资源。特别是当需要把输出文件放置到另一个域或者CDN上时。因此,在引用文件的时候使用相对路径,浏览器访问的时候会从publicpath开始找。

还有一些其他解释:

When executed in the browser, webpack needs to know where you’ll host the generated bundle. Thus it is able to request additional chunks (when using code splitting) or referenced files loaded via the file-loader or url-loader respectively.

No, this option is useful in the dev server, but its intention is for asynchronously loading script bundles in production. Say you have a very large single page application (for example Facebook). Facebook wouldn’t want to serve all of its javascript every time you load the homepage, so it serves only whats needed on the homepage. Then, when you go to your profile, it loads some more javascript for that page with ajax. This option tells it where on your server to load that bundle from。

大体意思就是和path的区别是,path是针对本地文件系统,而publicPath是相对于浏览器的。当要进行异步按需加载的时候,publicpath告知了从哪里进行其他的chunk的获取(以ajax方式)。

此外,还可以给path和publicpath添加[hash]

以避免缓存。??不太会用

参考:

What does “publicPath” in webpack do?

chunkFileName

定义非入口文件名,比如通过代码分割所提取出来的文件。

还有一些其他的配置项,就不一一列举了。

<a name="t5" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: 400; outline: 0px;"></a>devtool

生成 source maps文件,对编译后的文件和源文件的对应,方便我们调试。该配置项有以下四个选项:

  • source-map
  • cheap-module-source-map
  • eval-source-map
  • cheap-module-eval-source-map

在文档入门webpack,看这篇就够了

中对该配置项的四个选项的区别有具体说明。

以上。

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

推荐阅读更多精彩内容

  • 引言 <a name="t1" style="box-sizing: border-box; background...
    黎涛note阅读 509评论 0 0
  • Webpack学习总结 此文只是自己学习webpack的一些总结,方便自己查阅,阅读不变,非常抱歉!! 下载安装:...
    Lxs_597阅读 939评论 0 0
  • 什么是Webpack? 按照官方文档的解释,Webpack就是个模块打包工具,将模块及其依赖打包生成静态资源。在W...
    Www刘阅读 672评论 2 10
  • webpack学习之路 当自己在学习webpack的时候,在网上发现中文的很详细的教程很少,于是便想将自己学习we...
    一个胖子的我阅读 1,869评论 2 20
  • Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境...
    stiller阅读 595评论 0 3