Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >webpack学习之旅-01节

webpack学习之旅-01节

作者头像
努力的Greatiga
发布于 2022-07-25 02:13:33
发布于 2022-07-25 02:13:33
25300
代码可运行
举报
运行总次数:0
代码可运行

前言

为什么突然想认真学一下webpack?

1 理解框架的需要

目前主流框架 Vue、React等都基于此,因此学一下基本使用时必要的

2 新框架开发需要

最近打算开发一个基于 html5、canvas 的小框架,涉及到页面频繁调试、浏览器兼容等;另外,开发过程中经常使用 import、ES6。如果直接基于 html + js + css来开发,那么效率很低还要处理很多兼容问题。

我们可以看到 webpack 的优势

  • 随意使用 import、ES6: 通过打包注入 html 即可, 使用 Babel 转译为 ES5 来兼容旧的浏览器
  • 使用 sass、less 等,使用 loader 进行处理生成 css 即可。另外,使用一些 plugins 给 css 加入不同浏览器前缀,以此来兼容
  • 使用热重载,这是最重要的,特别对于重复调整页面的前端来说!只需 ctrl+s 就可以自动刷新页面。

前言小结

基于以上几点,webpack 的使用时必需的,它会极大的加快开发效率,减少一些不必要的开发成本,从而将开发重心集中于框架本身的开发测试上。

webpack 基础

1 安装和配置文件

1.1 安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install webpack webpack-dev-server -S
  • webpack: 核心文件
  • webpack-dev-server: 服务器板块,用于开发模式 development

1.2 配置文件

  • 新建文件 webpack.config.js
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module.exports = {
  //....
}

2 入口 entry

entry 指定入口文件,也就是告诉 webpack 应该从哪个文件开始读取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require("path");

module.exports = {
  entry: "index.js"
}

3 出口 output

output 指定输出文件的位置,名称

  • filename: 指定输出的文件名;可以使用 [name].js 来保留文件原有名,当然也可以定义新的名字
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const path = require("path");

module.exports = {
  entry: "index.js",
  output: {
    filename: "[name].js",
    path: path.resolve(__dirname, "dist"),
  },
}

4 loader

4.1 作用

webpack 只能处理 javascript 和 json,所以需要依靠外部模块来处理其他文件。通常是放在 module 的 rules 属性中,以数组形式排列。

每一组 loader 有以下常见属性

  • test: 使用正则表达式匹配要处理的文件类型
  • use: 所使用的的 loader,可以是单个,也可以是数组形式的多个 loader
  • exclude: 排除指定文件,不处理

4.2 示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const HtmlWepackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const path = require("path");

module.exports = {
  //...出口, 入口配置
  // loader
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: "babel-loader",
        },
      },
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader",
        ],
      },
      {
        test: /\.scss$/,
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader",
          "sass-loader" ,
        ],
      },
    ],
  },
}

4.3 常见 loader

  • css-loader: 处理 js 文件中引用的 css 文件
  • style-loader: 将 js 文件中引用的 css 文件变为 style 标签 (注意: 该 loader 与 mini-css-extract-plugin 冲突,只能使用其中一个)
  • sass-loader: 将 scss 文件编译为 css 文件
  • babel-loader: 将 ES6 转译为 ES5
  • mini-css-extract-plugin: 将处理之后的 css/scss/less 打包成单独文件,并注入到 html 中,与 style-loader 冲突,因此使用 mini 时删除 style-loader

5 plugins

5.1 作用

插件,可以对文件作进一步处理,整合、注入等等

5.2 示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const HtmlWepackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const path = require("path");

module.exports = {
  //...出口、入口、loader配置
  plugins: [
    new MiniCssExtractPlugin({
      filename: "css/[name].css"
    }),
    new HtmlWepackPlugin({
      filename: "index.html",
      template: "./src/index.html",
    }),
  ],
}

6 devServer

6.1 作用

来源于 webpack-dev-server,是 webpack 提供的服务器模块,可以将打包生成后的文件放置与临时创建的 http 服务上,采可直接通过 ip:port 访问

6.2 常见属性

  • static: 指定服务来源的静态资源文件
  • port: 服务开启端口
  • hot: true/false,是否开启热重载

6.3 示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const HtmlWepackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const path = require("path");

module.exports = {
  //...出口、入口、loader、plugins配置
  devServer: {
    static: {
      directory: path.join(__dirname, 'public'),
    },
    compress: true,
    port: 9000,
    hot: true,
  },
}

7 完整示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const HtmlWepackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
const path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    filename: "[name].js",
    path: path.resolve(__dirname, "dist"),
  },
  devServer: {
    static: {
      directory: path.join(__dirname, 'public'),
    },
    compress: true,
    port: 9000,
    hot: true,
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: "css/[name].css"
    }),
    new HtmlWepackPlugin({
      filename: "index.html",
      template: "./src/index.html",
    }),
  ],
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: "babel-loader",
        },
      },
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader",
        ],
      },
      {
        test: /\.scss$/,
        use: [
          MiniCssExtractPlugin.loader,
          "css-loader",
          "sass-loader" ,
        ],
      },
    ],
  },
};

总结

  • 本次学习了入口、出口、loader、plugins、devServer 的基本使用。当然还有进阶的用法,这个之后学习了在进行总结。
  • 上述示例以及可以在热重载下进行简单的网页开发了,并且可以不用担心 javascript 语法 的兼容问题
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
webpack构建自定义vue应用
相比较react,vue所需要的插件要少得多,我们知道在vue中,大多数是以.vue的模版组件,因此关键是我们可以用webpack的相关loader能够解析.vue文件即可,在vue项目中解析单文件组件,热加载,css作用域等全部依赖于这个插件vue-loader[1],因此vue-loader算是vue工程化中必不可少的一个插件。
Maic
2022/07/28
5220
webpack构建自定义vue应用
笔记 | 一些常用的 webpack 配置
webpack 官网 https://webpack.js.org/guides/ 示例代码 官网 https://github.com/zkeq/jirengu_learn_09 初始化 npm 仓库 npm init -y 安装 webpack yarn add -D webpack yarn add -D webpack-cli yarn add -D webpack-dev-server 初始化 webpack.config.js const path = require('path'); m
Zkeq
2022/09/19
3100
webpack打包优化面试_什么是webpack
3. 正常实现es6转换es5 基本实现效果查看webpack官网达到实现效果
全栈程序员站长
2022/11/03
9290
40·灵魂前端工程师养成-前端框架webpack
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
8440
40·灵魂前端工程师养成-前端框架webpack
webpack 入门教程
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
老马
2018/08/20
4K0
webpack 入门教程
WebPack5.0 快速入门
前置知识: 此文章属于前端——框架进阶篇,需要实现掌握:HTML+CSS+JS三件套、Node...
Java_慈祥
2024/08/01
1390
WebPack5.0 快速入门
webpack 4 配置备忘
webpack.dev.js const merge = require('webpack-merge'); const webpack = require("webpack"); const path = require('path'); const common = require('./webpack.common.js'); module.exports = merge(common, { output: { // 出口文件 path: __dirname + '/dist
蓓蕾心晴
2021/12/16
2860
深入浅出webpack的最佳实践!
导语 | 本文推选自腾讯云开发者社区-【技思广益 · 腾讯技术人原创集】专栏。该专栏是腾讯云开发者社区为腾讯技术人与广泛开发者打造的分享交流窗口。栏目邀约腾讯技术人分享原创的技术积淀,与广泛开发者互启迪共成长。本文作者是腾讯云前端开发Jou。 自从加入腾讯,作者便一直在使用webpack,因此,本文主要整理一下webpack相关的知识点,由浅入深,后续会一直更新分享,以便对此方面感兴趣的开发者们提供一些经验和帮助。欢迎点击文末「阅读原文」访问腾讯云开发者社区,查看作者作品~ 核心概念 (一)Module
腾讯云开发者
2022/08/31
6850
深入浅出webpack的最佳实践!
CopyWebpackPlugin 在构建过程复制文件到输出目录
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
用户7737280
2024/08/28
850
Webpack4 搭建 Vue 项目
由于 Parcel 打包工具的影响,webpack4 也追求零配置搭建项目。而前阵子出现的 vue-cli 3.0也是基于 webpack4 零配置的思想创建的。对于一些习惯webpack3 的开发者难免有些不习惯。本文就带你绕过 vue-cli,用 webpack4 一步步搭建 vue 项目。
小皮咖
2019/11/05
1.1K0
盘点那些在Webpack中常见的Plugins
Plugin(Plug-in)是一种计算机应用程序,它和主应用程序互相交互,以提供特定的功能
@超人
2021/09/17
7950
盘点那些在Webpack中常见的Plugins
从零认识webpack4.0,带你走进神秘的webpack
前言: 作为一个现代javascript 应用程序的静态模块打包器,webpack能将各种资源,如js,css, 图片等作为模块来处理,是当下前端工程化的一个很受欢迎的工具,webpack目前最新的版本是4.0,文章将在4.0 的基础上,从使用者的角度,一步步教你认识并搭建一个简单的webpack配置项目,当然webpack的配置和使用较为丰富且复杂。
前端老鸟
2019/07/29
4800
从零认识webpack4.0,带你走进神秘的webpack
​(非软文)Webpack从入门到实战搭建Vue脚手架(一万字总结)
安装依赖包 (-D 将依赖记录成开发依赖, 只是开发中需要用的依赖, 实际上线不需要的)
Vam的金豆之路
2021/12/01
1.3K0
【学习笔记】尚硅谷Webpack5入门到原理 | 基础篇
需要注意的是 package.json 中 name 字段不能叫做 webpack, 否则下一步会报错
LonelySnowman
2023/01/17
2.3K0
【学习笔记】尚硅谷Webpack5入门到原理 | 基础篇
2022年开发者都在用的 Webpack 插件,你用上了吗
如果我们有合适的工具,开发就会变得更容易。在这篇文章中,我将讨论一些流行的webpack插件。
前端修罗场
2022/07/29
5210
2022年开发者都在用的 Webpack 插件,你用上了吗
webpack 配置多页面应用的一次尝试
然后在 /build/utils.js 创建 getHtmlArray 方法,用来自动生成多个模板的配置:
神葳
2021/01/22
9030
webpack优化
webpack.config 按照production和dev分开配置, wepback.base.config.js
刘嘿哈
2022/10/25
2300
大作!webpack详细配置
注意:在一个模块中,只允许使用export default向外默认暴露一次成员,不能写多个export default,否则会报错
小丞同学
2021/08/16
1.7K0
【Webpack】1083- 分享15个Webpack实用的插件!!!
用途: 将css样式从js文件中提取出来最终合成一个css文件,该插件只支持webpack4之前的版本,如果你当前是webpack4及以上版本那么就会报错。
pingan8787
2021/10/08
5550
【Webpack】1083- 分享15个Webpack实用的插件!!!
入门webpack的最佳实践(基于webpack4.X 5.X)--基础篇
来到这家公司之后,一直在使用webpack,也写了不少笔记,但是都比较零散,现在决定整理一下webpack相关的知识点,由浅入深,方便自己后续查漏补缺,后续会一直更新。
Jou
2022/08/18
6590
入门webpack的最佳实践(基于webpack4.X 5.X)--基础篇
相关推荐
webpack构建自定义vue应用
更多 >
LV.0
这个人很懒,什么都没有留下~
作者相关精选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验