webpack的基础使用

原视频地址


创建列表隔行变色效果

1.基本操作:

1.新建项目空白目录(不能叫webpack!!!),运行npm init -y 命令,初始化管理配置文件 package.json

在 vscode 中按快捷键 ctrl+` 可打开终端

2.新建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">
    <title>Document</title>
</head>
<body>
    // 执行 ul>li{这是第$个li}*9 命令,快速创建li
    <ul>
        <li>这是第1个li</li>
        <li>这是第2个li</li>
        <li>这是第3个li</li>
        <li>这是第4个li</li>
        <li>这是第5个li</li>
        <li>这是第6个li</li>
        <li>这是第7个li</li>
        <li>这是第8个li</li>
        <li>这是第9个li</li>
    </ul>
</body>
<script src='./index.js'></script>
</html>

3.运行npm i jquery -S,安装jquery

4.通过模块化的形式,实现隔行变色效果

index.js文件内容:

// jquery大小写不影响
import $ from 'jQuery'

// odd选择器匹配索引值为奇数的元素,从0开始计数
// even选择器匹配所有索引值为偶数的元素,从0开始计数
$(function(){
    $('li:odd').css('backgroundColor','pink')
    $('li:even').css('backgroundColor','lightblue')
})

运行后发现并不能正确实现效果并且报错,原因在于 index.js 文件的首行代码是es6的模块化语法,浏览器对这种语法不能很好的识别。

解决方法:
把代码转换成没有兼容性的代码,在index.html文件中导入转换之后的<script src='xxx'></script>代码。


2.在项目中安装和配置webpack

1.运行npm install webpack webpack-cli -D命令,安装 webpack 相关的包

2.在项目根目录中创建名为 webpack.config.js 的 webpack 配置文件

3.在 webpack 的配置文件中,初始化如下基本配置:

module.exports = {
        mode: 'development'  // mode 用来制定构建模式
}

mode - development/production
开发阶段值尽量都设为 development

4.在 package.json 配置文件中的script 节点下,新增 dev 脚本如下:

"scripts": {
"dev": "webpack"  // script节点下的脚本,可以通过 npm run 执行
}

5.在终端中运行 npm run dev 命令,启动 webpack 进行项目打包。打包完成可见根目录新建 dist\main.js,记得修改 index.html 中的js路径。


3.配置打包的入口与出口

webpack 的 4.x 版本中默认约定:

  • 打包的入口文件为 src\index.js
  • 打包的输出文件为 dist\main.js

如果要修改打包的入口和出口,可在 webpack.config.js 中新增如下配置信息:

const path = require('path') //导入node.js中专门操作路径的模块
module.exports = {
    entry: path.join(__dirname, './src/index.js'),  //打包入口文件的路径
    output: {
        path: path.join(__dirname, './dist'),  //输出文件的存放路径
        filename: 'bundle.js'  //输出文件的名称
    }
}

4.配置自动打包的功能

打包完成后如果需要修改css效果或是其他代码,修改后直接刷新浏览器是不成功的,需要重新打包再执行,非常麻烦,所以在这里配置 webpack 的自动打包功能。
接上,先 ctrl+c停掉自动打包。

1.运行 npm install webpack-dev-server -D 命令,安装支持项目自动打包的工具

2.修改package.json->scripts 中的 dev 命令如下:

      "dev":  "webpack-dev-server"

webpack-dev-server会启动一个实时打包的http服务器

3.将src\index.html中的script脚本引用路径改为 bundle.js

<script src='/bundle.js'></script>

3.运行npm run dev 命令,重新进行打包(打包后不会退出终端,而是等待着代码的改变

4.在浏览器中访问 http://localhost:8080/ 查看自动打包效果


5.配置生成预览页面

进入http://localhost:8080/后看到的是根目录,需要点击手动进入index.html,所以配置使点击直接进入index.html。

1.运行npm install html-webpack-plugin -D命令,安装生成预览页面的插件

2.修改 webpack.config.js 文件的头部区域,添加如下配置信息:

//导入生成预览页面的插件,得到一个构造函数
const HtmlWebpackPlugin = require('html-webpack-plugin')
const htmlPlugin = new HtmlWebpackPlugin ({  //创建插件的实例对象
    template: './src/index.html',  //指定要用到的模板文件
    filename: 'index.html'  //指定生成的文件名称,该文件存在于内存中,在目录中不显示
})

3.修改 webpack.config.js 文件中向外暴露的配置对象,新增如下配置节点:

module.exports = {
    plugins:[ htmlPlugin ]  // plugin 数组是 webpack 打包期间会用到的一些插件列表
}

4.重新执行npm run dev命令,进入http://localhost:8080/查看效果


6.配置自动打包的相关参数

运行npm run dev后需要手动复制浏览器地址才能查看页面,修改使运行后自动弹出页面。

//package.json中的配置
// --open 打包完成后自动打开浏览页面
// --host 配置 ip 地址
// --port 配置端口
"script": {
    "dev": "webpack-dev-server --open --host 127.0.0.1 --post 8888"
}

7.webpack中的加载器

在实际开发过程中, webpack 默认只能打包处理以 .js 后缀名结尾的模块,其他模块默认处理不了,需要调用 loader 加载器才可以正常打包,否则会报错。
loader 加载器可以协助 webpack 打包处理特定的文件模块,比如:

  • less-loader 可以打包处理 .less 相关的文件
  • sass-loader 可以打包处理 .scss 相关的文件
  • url-loader 可以打包处理 css 中与 url 路径相关的文件

打包处理 css 文件

  1. 运行npm i style-loader css-loader -D命令,安装处理 css 文件的loader

2.在 webpack .config.js 的 module->rules 数组中,添加 loader 规则如下:

// 所有第三方文件模块的匹配规则
module: {
    rules: [
        { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }    
]
}
  • 其中, test 表示匹配的文件类型, use 表示对应要调用的 loader
  • use 数组中指定的 loader 顺序是固定的

省略了在src/css中写css文件内容及 index.js 中import css文件的步骤,下面也都省略了奥~

打包处理less文件

  1. 运行 npm i less-loader less -D

2.在 webpack.config.js 的 module->rules 数组中,添加 loader 规则如下:

// 所有第三方文件模块的匹配规则
module: {
    rules: [
        { test: /\.css$/, use: [ 'style-loader', 'css-loader', 'less-loader' ] }    
]
}

打包处理scss文件

  1. 运行 npm i sass-loader node-sass -D

2.在 webpack.config.js 的 module->rules 数组中,添加 loader 规则如下:

// 所有第三方文件模块的匹配规则
module: {
    rules: [
       { test: /\.scss$/, use: [ 'style-loader', 'css-loader', 'sass-loader' ] }    
]
}

8.配置postCSS自动添加css的兼容前缀

1.运行npm i postcss-loader autoprefixer -D

2.在项目根目录中创建 postcss 的配置文件 postcss.config.js ,并初始化如下配置:

const autoprefixer = require('autoprefixer') //导入自动添加前缀的插件
module.exports = {
    plugins: [autoprefixer] //挂载插件
}

3.在 webpack.config.js 的module->rules 数组中,修改(不是添加) css 的 loader 规则如下:

module: {
    rules:[
      { test: /\.css$/, use: [ 'style-loader', 'css-loader', 'postcss-loader' ] }
]
}

9.打包样式表中的图片和字体文件

1.运行npm i url-loader file-loader -D

  1. webpack.config.js 的 module->rules 中添加loader规则:
{ test: /\.jpg|png|gif|bmp|ttf|svg|woff|woff2$/, use: 'url-loader?limit=2147'}

limit是图片大小


10.打包处理js文件中的高级语法

如果直接在index.js文件中加上:

class Person{
     static info='aaa'
}

直接运行会报错,因为默认打包不了这种高级语法,需要配置。

1.安装babel转换器相关的包npm i babel-loader @babel/core @babel/runtime -D
2.安装babel语法插件相关的包npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
3.在项目根目录中创建babel配置文件 babel.config.js 并初始化基本配置如下:

module.exports = {
    presets: [ '@babel/preset-env' ],
    plugins: [ '@babel/plugin-transform-runtime', '@babel/plugin-proposal-class-properties' ]
}

4.在 webpack.config.js 的module->rules 数组中,添加 loader 规则:

// exclude为排除项,表示 babel-loader不需要处理 node_modules 中的js文件
{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }

这样再运行就可以在控制台输出'aaa'了。

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

推荐阅读更多精彩内容

  • webpack使用学习 本分享学习借鉴webpack中文官网,官网链接(中文文档):https://www.web...
    腿毛怪丶叔叔阅读 866评论 0 5
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,731评论 0 1
  • 源码地址:https://github.com/h2huanghui/WEBPACK-BASE 一、概念 webp...
    smartHui阅读 1,736评论 0 1
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,431评论 1 32
  • 美的教育,决定孩子的生命质地。 同样,美的行为,可以浸润孩子的灵魂。 深以为然。 小事:今天课堂上第五小组表现极好...
    研究僧在小学阅读 361评论 0 5