webpack的配置详解

webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。

通俗的解释就是:webpack 可以将你项目中的每一个模块都进行打包编译成一个或者多个静态资源,然后可以通过打包过后的静态资源来展示你的项目内容。

webpack(webpack.config.js) 的核心概念:

1.入口(entry)

打包模块的入口,在没有设置【入口(entry)】的时候,默认的入口路径为:【./src/index.js】。

代码:

单页面应用:

module.exports = {

  entry: './src/main.js'

}

多页面应用:

module.exports = {

  entry: {

    pageOne: './src/pageOne/index.js',

    pageTwo: './src/pageTwo/index.js'

  }

}

2.输出(output)

webpack 将打包编译的文件输出到 【output】 配置的路径之中。

注意,即使可以存在多个 entry 起点,但只能指定一个 【output】 配置。

代码:

const path = require('path');

module.exports = {

  output: {

    filename:path.join(__dirname,"/build/dist"),

    filename: "[name].[hash].dist.js"//打包后输出文件的文件名

  }

}

3.loader

【loader】 用于对模块的源代码进行转换。

需要进行安装:

npm install --save-dev babel-loader style-loader css-loader  less-loader postcss-loader

解释:

babel-loader:对.jsx、.js的代码进行转化。

postcss-loader:自动添加前缀的插件

less-loader:用于处理编译 .less 文件,将其转为 css 文件代码。

css-loader:帮我们分析出各个 css 文件之间的关系,把各个css文件合并成一段 css 。

style-loader:将css-loader生成的css代码挂载到页面的header部分。

代码:

module.exports ={

module: {

    rules: [

{

test: /(\.jsx|\.js)$/,

use: {

loader: "babel-loader",

},

exclude: /node_modules/

},

{

test:/\.(css|less)$/,

use:[

{

// 将所有的计算后的样式加入页面中,html页面中插入css代码

loader:"style-loader"

},

{

// 解析CSS样式,可以用模块的方式手动对象形式写样式,style-loader自动处理了这个注入

loader:"css-loader",

},// 能够使用类似@import 和 url(...)的方法实现 require()的功能

{

loader:"less-loader"

},

{

loader: "postcss-loader"

}// 自动添加前缀的插件

]

}

    ]

}

}

4.插件(plugin)

【插件(plugin)】 是 webpack 的重要功能,目的在于解决 loader 无法实现的其它事。

可以安装各种插件:

热加载插件:

webpack.HotModuleReplacementPlugin()

模板插件:

npm install --save-dev html-webpack-plugin

静态资源复制到指定目录(一般是编译打包的输出目录):

npm install --save-dev copy-webpack-plugin

等等插件。

代码:

const path = require('path');

const webpack = require('webpack');

const HtmlWebpackPlugin = require('html-webpack-plugin')

const copyWebpackPlugin = require('copy-webpack-plugin')

module.exports ={

plugins: [

new webpack.HotModuleReplacementPlugin(),// 热加载插件

new HtmlWebpackPlugin({

template: path.join(__dirname, `src/index.tmpl.html`),

filename: `index.html`,

}),

// 静态资源输出到webpack的打包编译的输出目录

new copyWebpackPlugin([{

from:  path.resolve(__dirname, "./public"),

to: path.resolve(__dirname, './build/development') // 放到 output 文件夹下

}])

]

}

5.模式(mode)

通过选择 development、 production 、none 之中的一个,来设置 【mode】 参数,默认值为 production。

代码:

// 开发环境

module.exports = {

  mode: 'development',

}

// 生产环境

module.exports = {

  mode: 'production',

}

6.devtool

是配置sourceMap的。

sourse-map 就是一份源码和转换后代码的映射文件。

eval:打包后的模块都使用 eval() 执行,行映射可能不准;不产生独立的 map 文件。

cheap:map 映射只显示行不显示列,忽略源自 loader 的 source map。

inline:映射文件以 base64 格式编码,加在 bundle 文件最后,不产生独立的 map 文件。

module:增加对 loader source map 和第三方模块的映射。

开发环境:为了方便代码调试。

module.exports = {

  devtool:"cheap-module-eval-source-map",

}

生产环境:打包出来的文件相对小。

module.exports = {

  devtool:"none" // 或者不配置

}

7.devServer

是webpack开发服务器。

安装:

npm install --save-dev webpack-dev-server

contentBase:本地服务器加载的页面所在的目录。

inline:设置是否实时刷新。

port:端口号设置,如果省略,默认为"8080"。

hot:热加载。

overlay:设置报错信息是否在浏览器上面显示。

proxy:配置代理。

代码:

module.exports = {

  devServer:{

contentBase:"./build/development",//本地服务器所加载的页面所在的目录

historyApiFallback:true,//不跳转,所有的跳转将指向index.html

inline: true,//实时刷新,

port:8887,//如果省略,默认为"8080"

hot:true, //热加载,还需要安装pm install --save-dev babel-plugin-react-transform react-transform-hmr

overlay: {//报错信息在浏览器上面显示

warnings: true,

errors: true

},

// 配置代理

proxy: {

'/': {

target:"http://localhost:8085"

}

}

}

}

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

推荐阅读更多精彩内容