webpack入门(一)

104 阅读3分钟

概念

本质上,webpack是一个用于现代JS应用程序的静态模块打包工具。当webapck处理应用程序时,他会在内部从一个或多个入口点构建一个依赖图,然后将你项目中的每一个模块组合成一个或多个bundles,他们均为静态资源,用于展示你的内容。

核心概念

Webpack 支持所有符合 ES5 标准 的浏览器(不支持 IE8 及以下版本)。webpack 的 import() 和 require.ensure() 需要 Promise。如果你想要支持旧版本浏览器,在使用这些表达式之前,还需要 提前加载 polyfill。

  • 环境

Webpack 5 运行于 Node.js v10.13.0+ 的版本

更多概念可以查看webpack中文文档

搭建一个具有打包功能的项目

第一步、初始化项目

1、创建一个项目文件夹webpack

2、执行npm init -y

3、安装wepack webpack-cli


cnpm i --save-dev webpack webpack-cli

4、创建一个src文件夹, 在这个目录下创建一个入口文件index.js


console.log('入口文件')

第二步、使用webpack进行打包

1、创建一个打包文件输出目录dist

2、在根目录下创建webpack.config.js配置文件

const path = require('path')

const config = {
    // 入口文件
    entry: './src/index.js',
    // 出口文件
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js'
    }
}

module.exports = config

3、在package.json中配置打包命令

"scripts": {
    "clean": "rm dist/bundle.js",
    "build-dev": "webpack --mode development",
    "build-prod": "webpack --mode production"
},

4、执行打包命令


npm run build-dev

这时就会在dist文件下创建一个bundle.js文件

5、在dist文件下创建一个index.html文件,引入bundle.js, 在浏览器中打开这个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>
        <script src="bundle.js"></script>
    </body>
</html>

最后,看下最终生成的项目目录

屏幕快照 2023-03-01 下午1.51.21.png

第三步、使用webpack打包CSS文件

我们都知道,webapck本身只能处理JS模块,如果要处理其他类型文件,就需要使用loader进行转换。

所以,我们需要先安装相关loader插件。CSS-loader是将CSS装载到JS;style-loader是让JS认识CSS

cnpm i --save-dev css-loader style-loader

修改webpack.config.js

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

loader 从右到左(或从下到上)地取值(evaluate)/执行(execute)。

在src目录下创建style.css


body {
    background-color: brown;
}

在index.js文件中引用


require('./style.css')

重新打包(先清空上次打包文件),再打开网页,就可以看到网页背景色已经改变了

第四步、引入html-webpack-plugin插件

如果我们想要在打包时,自动生成dist下的文件该怎么做呢?

这时我们就要自动生成一个HTML文件,而html-webpack-plugin插件就可以帮我们做到。

1、安装html-webpack-plugin

cnpm i --save-dev html-webpack-plugin

2、修改webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin')

....

plugins: [
    new HtmlWebpackPlugin()
  ]
  
....

该插件将为你生成一个 HTML5 文件, 在 body 中使用 script 标签引入你所有 webpack 生成的 bundle。

3、打包

运行打包命令npm run build-dev,我们可以再项目文件下直接生成一个dist文件,该文件下包含一个index.htmlbundle.js文件。

生成的index.html内容如下

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Webpack App</title>
  <meta name="viewport" content="width=device-width, initial-scale=1"><script defer src="bundle.js"></script></head>
  <body>
  </body>
</html>