webpack基础

安装webpack

1).打开项目目录终端,输入命令:

npm install webpack webpack-cli -D

2).然后在项目根目录中,创建一个 webpack.config.js 的配置文件用来配置webpack

在 webpack.config.js 文件中编写代码进行webpack配置,如下:

module.exports = {

    mode:"development"//可以设置为development(开发模式),production(发布模式)

}

补充:mode设置的是项目的编译模式。

如果设置为development则表示项目处于开发阶段,不会进行压缩和混淆,打包速度会快一些

如果设置为production则表示项目处于上线发布阶段,会进行压缩和混淆,打包速度会慢一些

3).修改项目中的package.json文件添加运行脚本dev,如下:

"scripts":{

    "dev":"webpack"

}

注意:scripts节点下的脚本,可以通过 npm run 运行,如:

运行终端命令:npm run dev

将会启动webpack进行项目打包

4).运行dev命令进行项目打包,并在页面中引入项目打包生成的js文件

打开项目目录终端,输入命令:

npm run dev

等待webpack打包完毕之后,找到默认的dist路径中生成的main.js文件,将其引入到html页面中。

浏览页面查看效果。

设置webpack的打包入口/出口

webpack中的0配置:

在webpack 4.x中,默认会将src/index.js 作为默认的打包入口js文件

默认会将dist/main.js 作为默认的打包输出js文件。

零配置是很弱的,特定的需求,总是需要⾃⼰进⾏配置

1、webpack有默认的配置⽂件,叫 webpack.config.js ,我们可以对这个⽂件进⾏修改,进⾏个性化配置,使⽤默认的配置⽂件:webpack.config.js

2、不使⽤⾃定义配置⽂件: ⽐如webpackconfig.js,可以通过--config webpackconfig.js来指定,webpack使⽤哪个配置⽂件来执⾏构建。

webpack.config.js配置基础结构


entry: "./src/index.js", //打包⼊⼝⽂件

output: "./dist", //输出结构

mode: "production", //打包环境

module: {

   rules: [
     //loader模块处理
       {
           test: /\.css$/,
           use: "style-loader"
       }
    ]
},
plugins: [new HtmlWebpackPlugin()] //插件配置
};
如果不想使用默认的入口/出口js文件,我们可以通过改变 webpack.config.js 来设置入口/出口的js文件,如下:
    const path = require("path");
    module.exports = {
        mode:"development",
        //设置入口文件路径
        entry: path.join(__dirname,"./src/xx.js"),
        //设置出口文件
        output:{
            //设置路径
            path:path.join(__dirname,"./dist"),
            //设置文件名
            filename:"res.js"
        }
    }

设置webpack的自动打包

默认情况下,我们更改入口js文件的代码,需要重新运行命令打包webpack,才能生成出口的js文件

那么每次都要重新执行命令打包,这是一个非常繁琐的事情,那么,自动打包可以解决这样繁琐的操作。

实现自动打包功能的步骤如下:

    A.安装自动打包功能的包:webpack-dev-server

        npm install webpack-dev-server -D

    B.修改package.json中的dev指令如下:

        "scripts":{

            "dev":"webpack-dev-server"

        }

    C.将引入的js文件路径更改为:<script src="/bundle.js"></script>

    D.运行npm run dev,进行打包

    E.打开网址查看效果:http://localhost:8080

注意:webpack-dev-server自动打包的输出文件,默认放到了服务器的根目录中.

补充:

在自动打包完毕之后,默认打开服务器网页,实现方式就是打开package.json文件,修改dev命令:

"dev": "webpack-dev-server --open --host 127.0.0.1 --port 9999"

webpack配置核⼼概念

image

-entry:
指定webpack打包⼊⼝⽂件:Webpack 执⾏构建的第⼀步将从 Entry 开始,可抽象成输⼊

//单⼊⼝ SPA,本质是个字符串
entry:{
  main: './src/index.js'
}
==相当于简写===
entry:"./src/index.js"
//多⼊⼝ entry是个对象
entry:{
  index:"./src/index.js",
  login:"./src/login.js"
}

-output:
打包转换后的⽂件输出到磁盘位置:输出结果,在 Webpack 经过⼀系列处理并得出最终想要的代码后输出结果。

output: {
  filename: "bundle.js",//输出⽂件的名称
  path: path.resolve(__dirname, "dist")//输出⽂件到磁盘的⽬录,必须是绝对路径
},
//多⼊⼝的处理
output: {
  filename: "[name][chunkhash:8].js",//利⽤占位符,⽂件名称不要重复
  path: path.resolve(__dirname, "dist")//输出⽂件到磁盘的⽬录,必须是绝对路径
},

-mode
Mode⽤来指定当前的构建环境
production
development
none
设置mode可以⾃动触发webpack内置的函数,达到优化的效果
开发阶段的开启会有利于热更新的处理,识别哪个模块变化
⽣产阶段的开启会有帮助模块压缩,处理副作⽤等⼀些功能
-loader
模块解析,模块转换器,⽤于把模块原内容按照需求转换成新内容。
webpack是模块打包⼯具,⽽模块不仅仅是js,还可以是css,图⽚或者其他格式
但是webpack默认只知道如何处理js和JSON模块,那么其他格式的模块处理,和处理⽅式就需要loader了

常⻅的loader
style-loader
css-loader
less-loader
sass-loader
ts-loader //将Ts转换成js
babel-loader//转换ES6、7等js新特性语法
file-loader//处理图⽚⼦图
eslint-loader

-moudle
模块,在 Webpack ⾥⼀切皆模块,⼀个模块对应着⼀个⽂件。Webpack 会从配置的 Entry 开始递归找出所有依赖的模块。
当webpack处理到不认识的模块时,需要在webpack中的module处进⾏配置,当检测到是什么格式的模块,使⽤什么loader来处理。

module:{
   rules:[
      {
         test:/\.xxx$/,//指定匹配规则
         use:{
           loader: 'xxx-load'//指定使⽤的loader
          }
       }
    ]
}

-Plugins
webpack的扩展补充作⽤于webpack打包整个过程webpack的打包过程是有(⽣命周期概念)钩⼦
plugin 可以在webpack运⾏到某个阶段的时候,帮你做⼀些事情,类似于⽣命周期的概念。
扩展插件,在 Webpack 构建流程中的特定时机注⼊扩展逻辑来改变构建结果或做你想要的事情。作⽤于整个构建过程。
HtmlWebpackPlugin
htmlwebpackplugin会在打包结束后,⾃动⽣成⼀个html⽂件,并把打包⽣成的js模块引⼊到该html中。
npm install --save-dev html-webpack-plugin
配置:
title: ⽤来⽣成⻚⾯的 title 元素
filename: 输出的 HTML ⽂件名,默认是 index.html, 也可以直接配置带有⼦⽬录。
template: 模板⽂件路径,⽀持加载器,⽐如 html!./index.html
inject: true | 'head' | 'body' | false ,注⼊所有的资源到特定的 template 或者
templateContent 中,如果设置为 true 或者 body,所有的 javascript 资源将被放置到 body
元素的底部,'head' 将放置到 head 元素中。
favicon: 添加特定的 favicon 路径到输出的 HTML ⽂件中。
minify: {} | false , 传递 html-minifier 选项给 minify 输出
hash: true | false, 如果为 true, 将添加⼀个唯⼀的 webpack 编译 hash 到所有包含的脚本和
CSS ⽂件,对于解除 cache 很有⽤。
cache: true | false,如果为 true, 这是默认值,仅仅在⽂件修改之后才会发布⽂件。
showErrors: true | false, 如果为 true, 这是默认值,错误信息会写⼊到 HTML ⻚⾯中
chunks: 允许只添加某些块 (⽐如,仅仅 unit test 块)
chunksSortMode: 允许控制块在添加到⻚⾯之前的排序⽅式,⽀持的值:'none' | 'default' |
{function}-default:'auto'
excludeChunks: 允许跳过某些块,(⽐如,跳过单元测试的块)
案例:

const path = require("path");
const htmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
 ...
 plugins: [
 new htmlWebpackPlugin({
      title: "My App",
      filename: "app.html",
      template: "./src/index.html"
     })
 ]
};
//index.html
<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <meta http-equiv="X-UA-Compatible" content="ie=edge" />
 <title><%= htmlWebpackPlugin.options.title %></title>
 </head>
 <body>
 <div id="root"></div>
 </body>
</html>

clean-webpack-plugin 作用,清空打包文件目录没有用的文件

npm install --save-dev clean-webpack-plugin
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
...
plugins: [
 new CleanWebpackPlugin()
]

clean-webpack-plugin:如何做到dist⽬录下某个⽂件或⽬录不被清空:使⽤配置项:cleanOnceBeforeBuildPatterns 案例:cleanOnceBeforeBuildPatterns: ["/", "!dll", "!dll/"], !感叹号相当于exclude 排除,意思是清空操作排除dll⽬录,和dll⽬录下所有⽂件。 注意:数组列表⾥的“/”是默认值,不可忽略,否则不做清空操作。

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

推荐阅读更多精彩内容

  • 1 模块化工具Webpack 1.1 概念简介 1.1.1 WebPack是什么 1 一个打包工具 2 一个模块加...
    Kevin_Junbaozi阅读 450评论 0 1
  • 深入浅出Webpack学习笔记 基本概念 常用的构建工具 所有的构建工具所做的工做大致一样,都是把源代码翻译转换成...
    IsaacHHH阅读 504评论 0 0
  • 模块化 CommonJS CommonJS是一种使用广泛的 JavaScript模块化规范,核心思想是通过 req...
    小小的白菜阅读 583评论 0 12
  • 一、项目初始化及 webpack 安装 初始化完成之后项目会有一个 package.json 和一个 node_m...
    Issho阅读 524评论 0 3
  • webpack作为前端现在比较热门的一个基于js应用的打包工具,在打包过程中会根据配置中提供的入口文件递归的去寻找...
    柴犬_阅读 497评论 0 0