Webpack最佳入门实践

一.洪水猛兽webpack?

  • 从一个新手的角度去想象webpack

    • 我们知道的主流框架是vue,react,a…那啥

    • 好吧,现在一般都是vue和react

    • 所以,如果是前端三项之力的话,我们会说

      • Vue
      • React
      • Webpack
  • 就是感觉webpack其实挺重要的

    • 就会给人一种很难很复杂的感觉,确实,webpack的功能的确很神奇
    • 但是webpack其实没有那么难
    • 我们通过简单的实践来告诉大家,不要惧怕webpack
    • Webpack so easy

  • 言归正传:

作为一个javascript前端开发者,肯定都知道webpack这个东西,也知道各种各样的module。webpack作为一个打包工具,就是将各种各样的模块捆绑(打包)在一起。支持的module有:

  • CommonJS

  • AMD

  • CSS import

  • Images url

  • Es module

webpack将所有模块捆绑在一起,使其运行。

二.重要概念

  • webpack其实就是控制五个模块,它们分别是

入口文件(entry point)

  • webpack工作开始的地方,就是一个js文件

  • 可以收集其他模块文件

  • 最后将所有模块文件打包到一起,形成一个可运行的代码

  • 入口文件默认是src/index.js

输出文件(output)

  • outout就是webpack通过build过程打包后形成的文件。

  • 默认的输出文件夹为根目录下的dist/文件夹

加载器(loaders)

  • loaders是一些第三方扩展包

  • 可以帮助webpack处理加载各种类型的文件。

    • 如处理css,image文件的loaders
    • vue,react的loaders
    • 如果没有loaders,webpack本身是不支持css文件,vue,react文件的

插件(plugins)

  • plugins也是第三方插件,它可以改变webpack的工作方式

    • 例如有些插件可以设置webpack的环境变量

模式(mode)

  • webpack有两种工作方式

    • development(开发模式)
    • production(生产模式)
  • 主要的区别就是在production模式下

    • 产生的捆绑包文件更小,去掉了在运行下无关的注释,空格等等
    • 这样可以加快用户加载代码的速度

  • 所以,这里有一个小问题,就是loaders和plugins有区别吗?

    • 在我看来,loaders是编译时候用一下,plugins则是可以一直使用,我觉得大概是这样吧
  • 看到这里,大家也了解到了为什么webpack的地位如此之高!

    • 可以统一不同的代码并打包
    • 而且过程中可以把不必要的代码干掉

webpack实践

初始化项目

  • 首先新建一个目录npm init -y

    • 你就是看见创建了一个package.json
  • 添加一条start脚本

  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "start":"webpack"
  },
  • 安装相应的依赖

    • webpack webpack-cli webpack-dev-serve三个依赖
    • yarn add webpack webpack-cli webpack-dev-serve
  • 然后就可以运行刚才编写的start命令了

    • yarn start
  • 和你想的一样,啥也没有打包会报错的

    • src/index.js创建一个index.js文件

      • 内容就console.log("hello webpack!");
  • 再次运行yarn start会有一个warning

    • webpack正常运行并生成了一个dist文件夹

    • dist就是webpack的输出文件

    • 但是有warning,是因为没有指定模式

      • 模式默认是production模式
      • 所以我们在命令中指定模式
"start": "webpack --mode development"

webpack配置文件,指定输入输出

前面提到,我们可以更改webpack的配置的。为了配置webpack,我们需要一个webpack.config.js文件。

  • 首先更改入口文件和出口文件:

    • // webpack.config.js
      const path = require("path");
      module.exports = {
          // 将入口文件指定为main.js
          entry: {index: path.resolve(__dirname, "src", "main.js")},
          // 将输出文件目录改为build/
          output: {
              path: path.resolve(__dirname, "build")
          }
      };
      
    • entry字段可以用来修改入口文件,上面的代码将webpack入口文件改为src/main.js
    • output字段用于修改输出文件位置,我们将输出文件目录改为build/
    • 将src目录下的index.js文件重命名为main.js,运行start命令,可以看到webpack输出目录build。

添加html页面

为了将webpack打包后的文件,用script标签嵌入到html文档中,我们需要借助第三方plugins扩展html-webpack-plugin

  • 上面介绍过plugin,是改变webpack工作方式的第三方扩展

  • html-webpack-plugin的作用就是改变webpack的工作方式

  • 使webpack打包后的js文件,添加到html页面的script标签中,这样打开html就可以运行我们的js脚本了


  • 1.首先安装插件
yarn add html-webpack-plugin --dev
  • 2.然后在config文件中使用插件
// webpack.config.js
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
  // 将入口文件指定为main.js
  entry: { index: path.resolve(__dirname, "src", "main.js") },
  // 将输出文件目录改为build/
  output: {
    path: path.resolve(__dirname, "build"),
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, "public", "index.html"),
    }),
  ],
};
  • 上面的代码指示webpack加载public/index.html,所以创建public目录,并添加index.html文件,内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>hello webpack!</div>
</body>
</html>

看一下打包后的html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script defer src="index.js"></script>
</head>
<body>
    <div>hello webpack!</div>
</body>
</html>
  • 我们可以看到打包后的js文件已经通过script标签加到了html中

通过webpack启动本地服务

作为开发者,肯定会用到本地服务,webpack提供了development server,可以很方便的启动一个本地服务,方便开发者进行开发工作

  • 1.首先我们需要安装webpack-dev-server包
yarn add webpack-dev-server --dev
  • 2.我们更改package.json中的命令如下:
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "buildDev": "webpack --mode development",
    "start":"webpack serve --mode development"
  },
  • 打包命令为buildDev

  • 本地运行为start

  • 执行yarn start,会在本地8080端口启动一个本地服务。

    • 打开可以显示index.html页面

我们再来说说loader

  • 在前面我们提到了plugin的实践

    • 那和它有些相似的loader如何使用呢?
  • 以css文件为例

    • 1.我们先安装样式的loader
    • npm install css-loader style-loader --save-dev
      
    • 然后配置loader即可
    •   module: {
          rules: [
            {
              test: /.css$/,
              use: ["style-loader", "css-loader"],
            },
          ],
        },
      
  • 是不是也很简单

    • 这样配置后,写的css文件也可以被编译打包了
    • 那么,我们就对webpack的模块都有了一个简单的实践了

提问区域

  • 为什么有的安装使用了-dev有的没有呢?

    • 加了-dev表示这些包只在开发模式中使用,方便开发工作,在生产环境下并没有作用
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack 是一个常用于打包 JavaScript 应用程序的工具,它的主要作用是将多个 JavaScript 文件打包成一个或多个文件,并且可以处理其他资源文件,如 CSS、图片等。在实际开发中,随着项目规模的增大,Webpack 打包速度、体积等问题就会变得越来越重要,因此,Webpack 优化也成为一个不可忽视的问题。 以下是一些常见的 Webpack 优化方法: 1. 减少文件搜索范围 Webpack 会遍历整个项目目录来查找符合要求的文件,这个过程会消耗大量的时间和资源。我们可以通过配置 resolve.modules 和 resolve.extensions 来减少搜索范围,从而提升打包速度。 2. 使用 Tree Shaking Tree Shaking 是指通过静态分析,将代码中用不到的部分去除,只打包项目中实际被使用的代码。这样可以减少打包后的文件体积。在实际开发中,我们可以使用 webpack.optimize.UglifyJsPlugin 和 webpack.optimize.AggressiveMergingPlugin 等插件来实现 Tree Shaking。 3. 使用 Code Splitting Code Splitting 是指将应用程序拆分成多个 bundle,使得每个 bundle 只包含应用程序的一部分功能,从而减少每个 bundle 的体积,提高加载速度。在实际开发中,我们可以使用 Webpack 自带的代码拆分功能,或者使用第三方库如 react-loadable、bundle-loader 等来实现 Code Splitting。 4. 使用缓存 Webpack 默认会将每个文件的 Hash 值作为文件名的一部分,这样可以保证文件内容发生变化时,文件名也会发生变化,从而避免浏览器缓存问题。但是,如果没有改变的文件也每次都重新打包,就会导致打包速度变慢。因此,我们可以使用缓存来提高打包速度。在 Webpack 中,我们可以使用 cache-loader 和 hard-source-webpack-plugin 等插件来实现缓存。 5. 使用 CDN 加速 通过使用 CDN(内容分发网络),可以将静态资源文件分发到全球各地的服务器上,从而提高文件加载速度。在 Webpack 中,我们可以使用 HtmlWebpackPlugin 和 Webpack 自带的 publicPath 配置来实现 CDN 加速。 以上是一些常见的 Webpack 优化方法,当然还有很多其他的优化方法,需要根据具体情况进行选择和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值