webpack 常用基础配置

一、常用配置项简要说明

  entry: //打包的入口文件,字符串/数组/对象
  output://配置打包的结果,对象
    fileName://定义输出文件名,字符串
    path://定义输出文件路径,字符串
  module: //定义对模块的处理逻辑,对象
    loader//数组
  resolve://影响对模块的解析,对象
    extensions://自动补全识别后缀,数组
  devServer://node.js构建用于构建本地服务器,对象
  devtool://生产Source Maps,字符串
  plugins://插件,数组

1、entry

  1. 可以是字符串:这个字符串表示需要打包的模块的路径,如果只有一个要打包的模块,可以使用这种形式

  2. 可以是数组:当需要将多个模块打包成一个模块,可以使用这个方式。如果这些模块之间不存在依赖,数组中值的顺序没有要求,如果存在依赖,则要将依赖性最高的模块放在最后面。
    例如:entry:["./app/one.js",".app/two.js"]

  3. 可以是键值对形式的对象:当需要分别打包成多个模块时,可以使用这种方式,例如;

  entry:{
    module1:"./app/one.js",
    module2:["./app/two.js","./app/three.js"]
  }

注:当entry是一个键值对形式的对象时,包名就是键名,output的filename不能是一个固定的值,因为每个包的名字不能一样

字符串 或 数组内的文件将合并输出成一个js;对象形式会以key name 分别输出js

2、output

output:{

  publicPath://
  path:,//绝对路径,此路径是你希望一次性打包的目录
  fialname:"[name].js"//输出文件名
  crossOriginLoading:false//跨域加载
  filename://每个输出文件的名称
}```

 *__dirname,就是当前webpack.config.js文件所在的绝对路径
1. 它是一个对象
2. `path`:对应一个绝对路径,此路径是你希望一次性打包的目录
3. `publicPath`
在编译时不知道最终输出文件的 publicPath 的情况下,publicPath 可以留空,并且在入口起点文件运行时动态设置:
 __webpack_public_path__。
 
__webpack_public_path__ = myRuntimePublicPath
// 其他的应用程序入口

4. `filename`指定输出文件名。
 * 当输出一个文件时,filename为一个确定的字符串,如:
`output:{filename:"build.js"}`      
 * 当输出多个文件,filename不能为一个确定的字符串。为了让每个文件有一个唯一的名字,需要用到下面的变量      
`[id]` 会被chunk的id替换掉。 
`[name]` 会被chunk的name替换掉(如果没有名字,会被id替换)。 
`[hash]` 会被编译的hash替换掉。 
`[chunkhash]` 会被 chunk hash替换掉。
>`[hash]`和`[chunkhash]`的区别:chunkhash可以根据文件内容生成哈希值。
>不要在开发环境下使用 [chunkhash],因为这会增加编译时间。将开发和生产模式的配置分开,并在开发模式中使用 [name].js 的文件名, 在生产模式中使用 [name].[chunkhash].js 文件名
>[具体查看](https://doc.webpack-china.org/guides/caching/)

5. `crossOriginLoading`此选项可以启用跨域加载(cross-origin loading) chunk。
  `false`- 禁用跨域加载
  `anonymous` - 启用跨域加载。当使用 anonymous时,发送不带凭据(credential)的请求。
  `use-credentials`- 启用跨域加载。发送带凭据(credential)的请求。
  >更多跨域加载信息请查看 [MDN](https://developer.mozilla.org/en/docs/Web/HTML/Element/script#attr-crossorigin)
  >默认值:false
  >参考 [library](https://doc.webpack-china.org/guides/author-libraries/)
  >参考 [开发工具](https://doc.webpack-china.org/guides/development/#choosing-a-tool)
6. 其他:[webpack2中文-output](https://doc.webpack-china.org/concepts/output/#-usage-)中获得更多的详细信息


####三、module
1. 为对象,定义对模块的处理逻辑   
2. [module.rules](https://doc.webpack-china.org/concepts/loaders/)允许你在 webpack 配置中指定几个 loader。它是一个数组,定义一系列loader,这个数组中的每一项都是一个对象loader: 

module: {
rules: [{
test: /.css$/,//(必须)正则表达式,用于匹配到的文件
use: [{
loader/loaders://(必须)loader的名称,字符串或者数组,处理匹配到的文件(处理原则从右至左)。如果只需要用到一个模块加载器则用loader:string,如果要使用多个模块加载器,则使用loaders:array
include/exclude://(可选)手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹);
query://(可选)为loaders提供额外的设置选项
}]
}]
}

3.  module除了可以配置loaders以外还能配置其他的值,在[webpack的官网](http://webpack.github.io/docs/configuration.html#module)中获得更多的信息


####四、resolve
1. `extensions` : 非必须,默认值`["", ".webpack.js", ".web.js", ".js"]`
  * 告诉解析器在解析中能够接受哪些扩展名
 * 数组中的空字符串是为了让每个模块都能够按照它们自己扩展名正确的被解析。    
 * '.js':请求js文件不带扩展(如:`require('somecode')`)    
2. 其他:[webpack的官网](http://webpack.github.io/docs/configuration.html#resolve)获得更多信息

####五、devServer
1. 基于node.js构建用于构建本地服务器,安装依赖`npm install --save-dev webpack-dev-server`
2.  配置项说明:
       ```
   disableHostCheck: true//  --host 0.0.0.0 时,报 [invalid host header](https://segmentfault.com/a/1190000009425403),需要改为true
  historyApiFallback: //在开发单页应用时,依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html
  noInfo:// true,不加重一长串的打包信息
  contentBase//默认webpack-dev-server会为根文件夹提供本地服务器,如果想为另外一个目录下的文件提供本地服务器,应该在这里设置其所在目录(本例设置到“public"目录)
  host: '0.0.0.0',//
  port//默认'8080' 
  inline//设置为true,热加载
  colors//  设置为true,使终端输出的文件为彩色的

*也可在package里的script里设置 *

六、devtool

  1. 生成Source Maps(使调试更容易)
  2. 在webpack的配置文件中配置source maps,需要配置devtool,它有以下四种不同的配置选项,各具优缺点,描述如下:
source-map//在一个单独的文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包文件的构建速度;
cheap-module-source-map//在一个单独的文件中生成一个不带列映射的map,不带列映射提高项目构建速度,但是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试造成不便;
eval-source-map//使用eval打包源文件模块,在同一个文件中生成干净的完整的source map。这个选项可以在不影响构建速度的前提下生成完整的sourcemap,但是对打包后输出的JS文件的执行具有性能和安全的隐患。不过在开发阶段这是一个非常好的选项,但是在生产阶段一定不要用这个选项;
cheap-module-eval-source-map//这是在打包文件时最快的生成source map的方法,生成的Source Map 会和打包后的JavaScript文件同行显示,没有列映射,和eval-source-map选项具有相似的缺点;

上述选项由上到下打包速度越来越快,不过同时也具有越来越多的负面作用,较快的构建速度的后果就是对打包后的文件的的执行有一定影响。

学习阶段以及在小到中性的项目上,eval-source-map是一个很好的选项,不过记得只在开发阶段使用它,
cheap-module-eval-source-map方法构建速度更快,但是不利于调试,推荐在大型项目考虑da时间成本是使用。

七、plugins

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

推荐阅读更多精彩内容