3.webpack使用css-loader加载css文件

1,683 阅读2分钟

在之前的文章中我们利用webpack自带的js资源加载模块将js文件打包,因此不需要手动安装。但是webpack只内置了js文件的资源加载模块,如果要加载css文件需要手动引入相应的资源加载模块。

引入css-loader

通过yarn add css-loader --dev安装

安装完成过后我们在src目录下新建一个index.css文件,随便设置几个属性

```
body {  margin: 0 auto;  padding: 0 20px;  max-width: 800px;  background: #f4f8fb;}```

然后我们在webpack.config.js文件中将入口文件修改为index.css

到这里,我们先不使用css-loader来执行打包,在终端输入yarn webpack,会报出一个错误

这个错误意思是模块解析失败,我们可能需要一个loader来处理css类型的文件

下面我们在webpack.config.js文件中去使用我们安装的css-loader文件

```javascript
const path = require('path')
module.exports = {
    mode: 'none',
    entry: "./src/index.css",    //入口文件
    output: {
        filename: "bundle.js",  //文件名称
        path: path.join(__dirname, "output")    //输出目录
    },
    module: {
        rules: [
            { 
               test: /\.css$/,  //使用正则表达式匹配.css文件
                use: 'css-loader'
            }
        ]
    }}
```

rules属性需要使用数组,因为我们还会有其他loader需要使用。数组的元素是对象,test属性是我们要打包的文件类型,这里使用正则表达式匹配以.css结尾的文件,use属性是要使用的loader。

我们在终端再次执行打包操作,这次打包就不回报上次那个错误了,然后我们使用serve .来看一下页面是否有使用到我们的css属性

从这里可以看到body里面并没有我们写的属性,这是因为我们打包过后的css代码只是被push到了一个数组中,但是并没有任何地方引用到,我们还需要一个style-loader,将css代码以style标签的形式添加到html代码中。

引入style-loader模块

通过yarn add style-loader --dev安装,安装过后到我们的webpack.config.js文件去使用

```
const path = require('path')
module.exports = {
    mode: 'none',
    entry: "./src/index.css",    //入口文件
    output: {
        filename: "bundle.js",  //文件名称
        path: path.join(__dirname, "output")    //输出目录
    },
    module: {
        rules: [
            {
                test: /\.css$/,  //使用正则表达式匹配.css文件
                use: ['style-loader','css-loader']
            }
        ] 
   }}
```

终端输入yarn webpack,打包完成之后,输入serve .启动浏览器,下面是最终结果

可以看到我们的css代码被添加到了head标签里面,body也有了我们写的属性

以上只是演示加载资源模块的方式,也是为了说明loader是webpack的核心特性,借助loader就可以加载任何类型的资源。

正常情况下项目的入口文件都是js文件,因为整个前端应用是由JavaScript驱动的,而css文件我们只需要通过import的方式就可以打包到js代码里面,下面我们将入口文件修改为src目录下的index.js。然后在index.js中导入index.css文件

```
import createHeading from './heading.js'
import './index.css'
const heading = createHeading()
document.body.append(heading)
```

为了能明显看到效果,我们创建一个heading.css文件,代码如下:

```
.heading {
    padding: 20px;
    background: #343a40;
    color: #fff;
}
```

然后在heading.js中引入

```
import './heading.css';
export default () => {
  const element = document.createElement('h2')
  element.textContent = 'Hello world'
  element.classList.add('heading');
  element.addEventListener('click', () => {
    alert('Hello webpack')
  })
  return element
}
```

然后执行yarn webpack,打包完成之后执行serve .

打开链接可以看到我们的css样式已经添加到页面中