Webpack5基础实践篇

154 阅读3分钟

前言

不进行其他打包工具和 webpack 的对比,仅介绍 webpack 做的工作,此系列将对webpack进行梳理,以及快速上手,立马用起来。

这里使用的版本依赖:
"webpack": "^5.74.0"
"webpack-cli": "^4.10.0"

下面是项目目录:

bc955b7407f1e3cc1e0a5b468f915b6.jpg

什么是Webpack

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler) 。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph) ,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle

为什么选择 Webpack

1. 模块化开发

在 webpack 中一切皆模块,js、css、图片、字体都是模块,而且支持静态解析、按需打包、动态加载、代码分离等功能,帮助我们优化代码,提升性能。

2. 新语法

Javascript、CSS 的语法规范在不断更新,但是浏览器的兼容性却不能同步的更新,可以通过 webpack 预处理器进行编译,自由的使用 JS、CSS 等语言的新语法。

webpack 使用 loader 对文件进行预处理。你可以构建包括 JavaScript 在内的任何静态资源。

Webpack 的基本内容

1. Webpack依赖图

任何时候,一个文件依赖于另一个文件,webpack 就把此视为文件之间有 依赖关系 。这使得 webpack 可以接收非代码资源(non-code asset)(例如图像或 web 字体),并且可以把它们作为 依赖 提供给你的应用程序。

在项目根目录下创建 webpack.config.js 文件,并在当中添加如下代码

const path = require('path');

module.exports = {
    entry:'./src/index.js', //entry属性,后面接文件路径,指定以哪个文件作为入口文件
    output:{
        filename:'build.js', //打包后输出的文件名称
        
        //输出目录 path 的绝对路径
        // __dirname,用来动态获取当前文件模块所属的绝对路径
        // path.resolve()时相当于是在当前文件夹下拼接了一个文件路径
        path:path.resolve(__dirname,'dist')
    }
}

根据 entry 属性设置,项目中的index.js文件为主要的入口文件,要运行什么程序,需要在这个文件中引入。

2. CSS的使用

首先用最直接的方式创建元素,在JS文件夹下创建 title.js ,并输入:

function fn() {
    let oTitle = document.createElement('h3');
    oTitle.innerHTML = '这是一个标题';
    oTitle.className = 'title';
    return oTitle
}

document.body.appendChild(fn());

在CSS文件夹下创建 style.css

.title{
    color:pink;
}

此时在 title.js 中引入 style.css ,然后需要在 webpack.config.js 中规定的入口文件 index.js 中把 title.js 引入,到这里就基本完成了,使用命令 npm run dev 进行打包,这个时候控制台会报错误,不用担心,这个错误是正常的,因为,webpack不会直接识别CSS类型的文件,处理报错也很简单,只需这样:

import 'css-loader!../css/style.css';

重新运行命令 npm run dev 进行打包,项目会自动生成dist文件夹

image.png

最后在 html 文件中引入 build.js,并运行 html ,就能看到页面了。

image.png

你会发现页面只有文字,样式没有出来,疑惑,不是引入样式了吗?

这里就说说 import 'css-loader!../css/style.css';css-loader!,添加这个只是能够识别,样式并不会显示到页面,想要样式生效,就需要使用到 loader

3. 加载CSS

需要使用到 css-loader、style-loader

这里我们直接下载:
npm i css-loader -D
npm i style-loader -D

先来说说这两个分别的作用
css-loader 会对 @import 和 url() 进行处理,就像 js 解析 import/require() 一样。
style-loader把 CSS 插入到 DOM 中。

安装完成后,还是回到 webpack.config.js,接着在output下面配置:

module:{
    rules:[
        {
            test: /\.css$/, //使用正则匹配.css后缀的文件
            //style-loader,css-loader有执行先后顺序,不然打包会出错
            use: ['style-loader','css-loader']
        }
    ]
}

配置完成后,到引入CSS文件的地方,把 css-loader!去掉,不然控制台会报import错误。

然后重新打包项目运行页面,样式效果就出来了。

总结

本文主要是讲解webpack的配置,以及对CSS文件的处理,让你对W、webpack有一个了解。
同时,下一篇将讲解《CSS的兼容处理》敬请期待