前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webpack实战——样式文件分离

webpack实战——样式文件分离

作者头像
流眸
发布2020-08-14 10:43:14
4810
发布2020-08-14 10:43:14
举报

前言

这是webpack实战系列笔记的第7篇记录——分离样式,前几篇记录如下:

  • 打包第一个应用
  • 模块化与模块打包
  • 资源输入与输出
  • 一切皆模块
  • 预处理器【上篇】
  • 预处理器——常用loader【下篇】

在之前篇章里面主要是对js的打包应用和处理,而打包方面另外一个重要工作就是样式处理

在实际工程中,如果项目具有一定规模,那么CSS的维护成本则会比较高昂,这个时候就需要更友好且更低价的方式来处理样式问题。本篇介绍webpack结合样式编辑器、转换器及相关插件来提升样式方面的开发效率。

分离样式

1. 分离样式文件概念

在之前写的简单demo中,处理过关于CSS,并且在预处理器篇介绍过关于CSS的预处理器:style-loader和css-loader。通过JS引入CSS样式去打包,在编写阶段可以直观的描述出来模块之间的依赖关系。

但是问题随之而来:在打包后,我们对css样式的添加,是通过标签<style>来引入的,可生产环境下,一般我们希望样式存在于CSS文件中而不是style标签中,因为文件更有利于客户端进行缓存。那么我们怎么输出单独的CSS文件呢?

2. mini-css-extract-plugin

“该插件主要是用于提取样式到CSS文件的。

特性:

  • 可处理多样式文件
  • 支持按需加载

3 安装

两种方式 选择一种即可

代码语言:javascript
复制
yarn add mini-css-extract-plugin
// 或
npm install mini-css-extract-plugin

4. 举例

举个例子:

a.js引入自身a.css样式,并引入b.js,而b.js也有自身相应的b.css样式,那么最终样式会被同步加载,通过index.html的link标签加载进来。

a.js
代码语言:javascript
复制
import './a.css'
import './b.js'

document.write('A.JS<br/>');
a.css
代码语言:javascript
复制
body{
    background: deepskyblue;
}
b.js
代码语言:javascript
复制
import './b.css'

document.write('B.JS<br/>');
b.css
代码语言:javascript
复制
body{
    background: thistle;
}
webpack.config.js
代码语言:javascript
复制
const MiniCssExtractPlugin = require('mini-css-extract-plugin')

module.exports = {
    entry: {
        index: './src/a.js',
    },

    output: {
        filename: '[name].js'
    },
    mode: 'development',

    // loader配置
    module: {
        rules: [
            // css
            {
                test: /\.css$/,
                use: [
                    {
                        loader: MiniCssExtractPlugin.loader,
                        options: {
                            publicPath: '../'
                        }
                    },
                    'css-loader'
                ]
            }
        ],        
    },

    plugins: [
        new MiniCssExtractPlugin({
            filename: '[name].css',
            chunkFilename: '[id].css'
        })
    ]
}
打包
代码语言:javascript
复制
yarn build
// 或
npm run build

build

HTML引入
代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="./dist/index.css">
    <title>style</title>
</head>
<body>
    
    <script src="./dist/index.js"></script>
</body>
</html>
运行结果

运行引入了脚本和样式的HTML文件,查看结果:

结果

小结

其实本篇就是单独拎出来了一个loader预处理器来介绍:mini-css-extract-plugin。目的就是生产环境下,通过link引入样式存在于CSS文件中而不是style标签中,这样更有利于客户端进行缓存。

下一篇介绍样式预处理

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 流眸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 分离样式
    • 1. 分离样式文件概念
      • 2. mini-css-extract-plugin
        • 3 安装
          • 4. 举例
            • a.js
            • a.css
            • b.js
            • b.css
            • webpack.config.js
            • 打包
            • HTML引入
            • 运行结果
          • 小结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档