从0构建webpack开发环境(二) 添加css,img的模块化支持

在一个简单的webpack.config.js中,构建了一个基础的webpack.config.js文件,但是只支持js模块的打包。

本篇中添加对css和img的模块化支持

首先需要安装三个个loader css-loader, style-loader,file-loader

yarn add css-loader style-loader

css-loader用于对css文件的解析,style-loader会将解析的css样式以style标签的形式插入到html文件中

安装好之后,需要修改webpack.config.js配置模块,

在之前的webpack的配置文件基础上,新加上module属性, 里面的style-loader需要在css-loader之前

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

rules属性则是匹配请求的Rule(规则)数组,数组每一项Rule对象都可用于匹配某一类型的模块。

用于匹配css模块的Rule,里面包含了两个属性testuse,
test一般是一个正则表达式,用于匹配需要解析的模块文件, use数组则一般指定使用哪些loader,里面每一项可以是字符串或者是对象

use:[
    'style-loader'
]
// 等同于
use: [
    {
        loader: 'style-loader'
    }
]

这里还可以使用postcss-loader插件为css属性添加浏览器前缀

在完成配置文件和依赖安装后,在src文件目录下新建style.css

.red{
  color: red;
}

同时在index.js文件中引入该css文件,

import _ from 'lodash'
import './style.css'

function createComponent(tag) {
  let element = document.createElement(tag)

  element.innerHTML = _.join(['Hello', 'webpack'], ', ')

  element.classList.add('red')

  return element
}

document.body.append(createComponent('div'))

之后执行打包指令, 然后打开dist目录下的index.html文件就会看到文字颜色已经是红色,同时在head标签里多了一个style标签,里面就是style.css里面的样式

同理可以通过file-loader处理图片资源,在配置文件中添加图片文件的匹配

  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader'
        ]
      },
      {
        test: /\.(jpg|jpeg|png|bmp)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: 'img/[name].[ext]'
            }
          }
        ]
      }
    ]
  }

在这个Rule.use规则中,通过options.name属性将图片文件打包到dist/img目录下,[name].[ext]占位符,让打包后的文件使用原来的文件名和后缀,
之后在index.js中引入一个图片

import _ from 'lodash'
import './style.css'
import ImgFile from './asset/tim.jpg'

function createComponent(tag) {
  let element = document.createElement(tag)

  element.innerHTML = _.join(['Hello', 'webpack'], ', ')
  element.classList.add('red')

  let img = new Image()
  img.src = ImgFile

  element.append(img)

  return element
}

document.body.append(createComponent('div'))

接着执行打包指令,就会看到dist目录下多了一个img文件夹,里面就是我们引入的图片。打开index.html就会看到图片

至此,就已经完成了对css和img的引入。但是当前的样式文件是以style标签的形式插入到html中的。

但是我们想要的是把css文件抽离出来一个单独的css文件
那么就需要plugin了,这里使用官方推荐的 MiniCssExtractPlugin 插件,这个插件需要额外安装,
在上一篇中,index.html是手动创建的,这里可以使用 HtmlWebpackPlugin 自动我们自动创建html文件,同时webpack还会在html里面自动添加css和script的外链,
这样就不用手动的引入css和js文件了。

安装 两个插件yarn add mini-css-extract-plugin html-webpack-plugin,

安装完成后需要在config文件顶部引入两个插件,然后在文件中添加 plugins 属性数组,在数组里通过new方式配置,
同时将之前的style-loader替换成MIniCssExtractPlugin提供的loader

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

module.exports = {
 ...
  module: {
    ...
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,  // 将'style-loader'替换成MIniCssExtractPlugin.loader
          'css-loader'
        ]
      },
    ...
  },
  plugins: [
    new HtmlWebpackPlugin(),
    new MiniCssExtractPlugin({
      filename: 'css/style.css'
    })
  ]
}

这里还需要一个CleanWebpackPlugin插件清空dist文件夹,这样每次打包都不用手动删除旧的文件

const { CleanWebpackPlugin } = require('clean-webpack-plugin') // 新的CleanWebpackPlugin 引入方式,旧的已不可用

之后删除dist文件夹,执行打包,就会看到新打包的文件,自动创建的index.html文件

完整的webpack.config.js文件

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

module.exports = {
  entry: {
    app: path.resolve(__dirname, './src/index.js')
  },
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader'
        ]
      },
      {
        test: /\.(jpg|jpeg|png|bmp)$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: 'img/[name].[ext]'
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin(),
    new MiniCssExtractPlugin({
      filename: 'css/style.css'
    }),
    new CleanWebpackPlugin()
  ]
}

原文地址:https://www.cnblogs.com/zzy1996/p/11563829.html

时间: 2024-11-06 07:22:29

从0构建webpack开发环境(二) 添加css,img的模块化支持的相关文章

从0构建webpack开发环境(三) 开发环境以及 webpack-dev-server 的使用

sourceMap 实际应用开发过程中大部分时间都是处于开发模式中,其中需要频繁的修改代码.调试和打包. 但是打包后的代码多个模块压缩到了一个bundle文件,如果出现警告或者异常很难定位到具体模块和位置,所以webpack提供了source map的配置 devtool, 该配置可选且具有多个配置项 ,具体包含以下: devtool 构建速度 重新构建速度 生产环境 品质(quality) (none) +++ +++ yes 打包后的代码 eval +++ +++ no 生成后的代码 che

Python黑帽编程1.2 基于VS Code构建Python开发环境

Python黑帽编程1.2 基于VS Code构建Python开发环境 Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Python>一书,为了解决很多同学对英文书的恐惧,解决看书之后实战过程中遇到的问题而作.由于原书很多地方过于简略,笔者根据实际测试情况和最新的技术发展对内容做了大量的变更,当然最重要的是个人

Eclipse中构建scala开发环境的步骤

Eclipse是一款非常使用的开发工具,熟悉它的童鞋应该都知道,它不仅是最常用的android开发工具,还是最常用的Java开发工具.既然eclipse如此重要,本文小编就和大家一起来扒一扒在eclipse中构建scala开发环境的相关知识,有兴趣的童鞋可以一起来看看. 1.scala是什么 其实,scala是 一种语法,类似Java,而sbt是 一个构建工具,类似maven,gradle,ant等.在eclipse中只有scala开发环境的插件,可以构建scala project,但是没有sb

构建Android 开发环境

Android 开发环境配置 Windows7  下搭建Android开发环境,整合数个攻略,修改了其中一些错误,并对一些配置遗漏做了补充. 工欲善其善,必先利其器 2014年8月13-日 by lilihao Q: 404536204 1. 安装jdk 和java环境变量的设置 (1). jdk 下载地址: 安装包: http://www.oracle.com/technetwork/java/javase/downloads/index.html 需要记住jdk的安装路径. (2). 配置j

Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种各样的问题也就来了,之前网上一直有零零碎碎的移植教程,但是都不完整,或是有这样或者那样的问题.今天刚刚研究成功了Cocos2dx-3.0版本项目的安卓平台移植问题,本人亲自完成了整个过程,将Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程 一起分享给大家.

第0课 - 搭建开发环境之安装QT

第0课 - 搭建开发环境之安装Qt 1. 课程学习的原材料 - Visual Studio 2010 - Qt SDK 4.7.4 - Qt Creator 2.4.1 2. Visual Studio 2010 (1)用于学习 Windows 上 GUI 程序设计的原理 (2)体会使用 C/C++ 编写 GUI 窗口应用程序 (3)展现 Qt 对于 Windows 窗口开发的面向对象封装 3. Qt SDK 与 Qt Creator - Qt SDK 为 Qt 开发提供必要的类和函数,以及相关

使用create-react-app 快速构建 React 开发环境以及react-router 4.x路由配置

create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境. create-react-app 自动创建的项目是基于 Webpack + ES6 执行命令如下: npm install create-react-app -g // 全局安装create-react-app,如果不想全局安装,则不要-g.可能会很慢,可以使用cnpm来安装 create-react-app my-app // my-app是项目名 cd my-app np

(转)VC6.0中OpenGL开发环境配置

首先简单介绍一下OpenGL: OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性.       OpenGL官方网站(英文)    http://www.opengl.org 然后设置编程的一些环境,及其安装必备文件的步骤如下: 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL的.但这里我们选择VC++ 6.0作为学习OpenGL的环

【React】使用 create-react-app 快速构建 React 开发环境

create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境. create-react-app 自动创建的项目是基于 Webpack + ES6 . 1.$ cnpm install -g create-react-app 2.$ create-react-app my-app 3.$ cd my-app/ $ npm start 项目目录 create-react-app 执行慢的解决方法