webpack看这一篇就够了,webpack4.0配置详解。

webpack看这一篇就够了,webpack4.0配置详解。

  1. 什么是webpack,webpack给我们解决了哪些实际问题?

    • 什么是webpack?
      webpack 它是基于 Node.js 开发出来的是前端的一个项目构建工具。

    • webpack给我们解决了哪些实际的问题?
      你是否和我一样整天被这种包与包之间的依赖关系搞得头皮发麻。比如你需要用到easyUI那么你就得引入jQuery,并且jQuery必须在easyUI引入之前引入。那这个就有点烦了,每个页面都必须引入。
      引入过多的静态资源后,网页打开需要的二次请求量也就高了,这样网页打开就会比较慢,那么项目经理找你的次数也会增加,加班次数增加,啊啊啊啊!
      这时候webpack就来了,可以很好的解决以上的问题,从此再也不用加班了。

    tips:除了webpack这个打包工具外还有Gulp也比较常见。

    • webpack完美实现资源的合并、打包、压缩、混淆等诸多功能。
      • 从此写代码无烦恼,天天吃饭吃的好。

      webpack官网

webpack的安装

  1. npm i webpack -g全局安装webpack,这样就能在全局使用webpack的命令
  2. 在项目根目录中运行npm i webpack -D安装到项目开发依赖中

webpack的配置文件

  • 其实webpack也可以不需要配置文件,然后就靠输命令来构建。(如果你喜欢你可以在项目上试试,公司第二天辞退QAQ)
  • 使用webpack的配置文件。
  1. 首先创建webpack的配置文件,在项目根目录创建webpack.config.js
  2. 配置webpack,你得先清楚这两个概念:'出口(output)'和'入口(entry)'。
    • 入口就相当于工厂中的原材料,出口就是做成的产品(够形象了吧)。
    • 入口简单讲就是你自己写的代码,出口呢就是webpack帮你处理过后的代码(你:’我为什么要给他处理,我自己不知道我写的啥吗?‘。先别抬杠,别着急慢慢看)。
      webpack.config.js简单的配置文件如下:
    // 导入处理路径的模块
    var path = require('path');

    // 导出一个配置对象,将来webpack在启动的时候,会默认查找`webpack.config.js`,并读取这个文件中配置,来进行打包
    module.exports = {
        // 入口文件
        entry: path.resolve(__dirname, './src/main.js'), 
        // 出口文件
        output: { 
            // 出口的路径
            path: path.resolve(__dirname, 'dist'), 
            // 出口的文件名
            filename: 'bundle.js' 
        }
    }

这样你在项目根目录执行webpack命令就会帮你把main.js给打包成bundle.js然后你以后只需要引入bundle.js就行了,是不是很神奇。

  • main.js打包的意义:
    1. 我们可以使用ES6提供的模块化进行代码的编写了。(配置babel之后)
    2. 我们可以直接在js文件上引入样式了。
    3. 代码美观冗余的代码很少很少了。

大体了解了吧

  • 我们这样配置后有个问题,我们每次修改代码都必须重新打包,一个字:麻烦。
  • 使用webpack-dev-server来实现代码的实时打包。
    • 首先npm i webpack-dev-server -D安装一下webpack-dev-server
    • 直接输webpack-dev-server会报错,这里我们得借助package.json来进行打包,在scripts下增加"dev": "webpack-dev-server"指令,然后npm run dev,就能实时打包了。
    • 使用webpack-dev-server的打包是不会产生出口文件的,他是将出口文件放在内存里,这样来做到实时读取和实时打包的。
    • 默认启动端口是8080我们可以webpack-dev-server --port 3000来指定端口
    • 默认启动是在项目根目录,我们可以webpack-dev-server --port 3000 --contentBase src让其在./src中启动
    • 可以配置热更新,就不用每次刷新了,webpack-dev-server --port 3000 --contentBase src --hot
    • 每次都得手动开启浏览器,不喜欢,我们可以让其构建时自动打开浏览器webpack-dev-server --port 3000 --contentBase src --hot --open
    • html文件没进内存-_-!,我们可以配置插件html-webpack-plugin插件
     // 导入处理路径的模块
     var path = require('path');
    
     //自动生成html文件
     var htmlWebpackPlugin = require('html-webpack-plugin');
    
     // 导出一个配置对象,将来webpack在启动的时候,会默认查找`webpack.config.js`,并读取这个文件中配置,来进行打包
     module.exports = {
         // 入口文件
         entry: path.resolve(__dirname, './src/main.js'), 
         // 出口文件
         output: { 
             // 出口的路径
             path: path.resolve(__dirname, 'dist'), 
             // 出口的文件名
             filename: 'bundle.js' 
         },
         plugins:[
             new htmlWebpackPlugin({
                 //模板路径
                 template:path.resolve(__dirname, 'src/index.html'),
                 //生成的HTML文件的名称
                 filename:'index.html'
             })
         ]
     }
    
    + 这里就不需要再配置`--contentBase src`了,`html-webpack-plugin`插件会自动把bundle.js注入到index.html页面中!(好玩吧)
    + 最终在packjson的`script`中增加这个:` "dev":"webpack-dev-server --port 3000 --hot --open" `
    + 除了加命令参数外,我们还可以在配置文件中进行配置增加
        1. 第一步在配置项中增加
```javascript
devServer:{
    port:3000
    hot:true,
    open:true
}
    2. 在头部加载`webpack`模块:
var webpack = require('webpack');
    3. 在`plugins`下新增插件(热部署):
new webpack.HotModuleReplacementPlugin()

使用webpack来打包css文件

+ 是的,css也能打包,包括`less,sacc`都行的只是`loader`不一样
    1. 安装需要的`loader`,运行`npm i style-loader css-loader -D` 
    2. 修改配置文件增加`module`项配置
// 配置第三方loader模块
module: { 
        rules: [ 
            { 
                // 正则匹配所有的.css文件
                test: /\.css$/, 
                //处理css文件的loader
                use: ['style-loader', 'css-loader'] 
            }
        ]
    }

注意:use表示使用哪些loader来处理test所匹配到的文件;use
中相关loader模块的调用顺序是从后向前调用的;(自己第一次的时候就入坑了)

使用webpack打包less文件

  1. 下载需要的loadernpm i less-loader less -D
  2. 修改配置文件:
module: { 
        rules: [ 
            { 
                // 正则匹配所有的.css文件
                test: /\.css$/, 
                //处理css文件的loader
                use: ['style-loader', 'css-loader'] 
            },
            { 
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader'] 
            }
        ]
    }

使用webpack打包sass文件

  1. 下载需要的loadernpm i sass-loader node-sass -D
  2. 修改配置文件:
    //在module下的rules增加如下代码
    { 
        test: /\.scss$/, 
        use: ['style-loader', 'css-loader', 'sass-loader'] 
    }

使用webpack处理css中的路径(图片等一系列)

  1. 下载需要的loadernpm i url-loader file-loader -D
  2. 修改配置文件:
//在module下的rules增加如下代码
{ test: /\.(png|jpg|gif)$/, use: 'url-loader' }
  1. 默认会将图片转换成base64,可以通过limit设置进行base64编码的图片大小;只有小于指定字节(byte)的图片才会进行base64编码:
//在module下的rules增加如下代码
{ test: /\.(png|jpg|gif)$/, use: 'url-loader?limit=43960' },

使用babel处理高级JS语法

  1. 安装需要的loadernpm i babel-core babel-loader babel-plugin-transform-runtime -D
  2. 安装转换规则npm i babel-preset-env babel-preset-stage-0 -D
  3. 修改配置文件添加相关loader模块,一定要把node_modules文件夹添加到排除
//在module下的rules增加如下代码
{ 
    test: /\.js$/, 
    use: 'babel-loader', 
    //排除node_modules
    exclude: /node_modules/ 
}
  1. 在项目根目录中添加babel的配置文件.babelrc文件,并修改这个配置文件如下:
{
    //使用何种转换语法
    "presets":["env", "stage-0"],
    //插件配置
    "plugins":["transform-runtime"]
}

注意:这里使用最新的转换语法babel-preset-env,你看网上很多都用babel-preset-es2015,建议你使用env,它包含了所有的ES相关的语法;

好了webpack的基本配置都说的差不多,不用去记,很多脚手架就能直接给你配好,比如vue-cil,不过如果怕忘欢迎收藏

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

推荐阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,018评论 0 21
  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 6,617评论 0 16
  • webpack 介绍 webpack 是什么 为什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert阅读 6,415评论 2 71
  • 写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较...
    不忘初心_9a16阅读 3,227评论 0 17
  • 司徒家和白家是邻里,司徒府有一小姐端庄沉稳,临危不乱,她自小随父亲习武,招式诡异层出不穷。这也与司徒大将军的教导有...
    风禾云起阅读 80评论 0 0