博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实战webpack系列04
阅读量:5064 次
发布时间:2019-06-12

本文共 2770 字,大约阅读时间需要 9 分钟。

04. 一切皆模块

Webpack有一个不可不说的优点,它把所有的文件都都当做模块处理,JavaScript代码,CSS和fonts以及图片等等通过合适的loader都可以被处理。

一、CSS

继续上面的例子

//安装npm install --save-dev style-loader css-loader
//使用module.exports = {   ...    module: {        rules: [            {                test: /(\.jsx|\.js)$/,                use: {                    loader: "babel-loader"                },                exclude: /node_modules/            },            {                test: /\.css$/,                use: [                    {                        loader: "style-loader"                    }, {                        loader: "css-loader"                    }                ]            }        ]    }};

请注意这里对同一个文件引入多个loader的方法。

接下来,在app文件夹里创建一个名字为"main.css"的文件,对一些元素设置样式

/* main.css */html {  box-sizing: border-box;  -ms-text-size-adjust: 100%;  -webkit-text-size-adjust: 100%;}*, *:before, *:after {  box-sizing: inherit;}body {  margin: 0;  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;}h1, h2, h3, h4, h5, h6, p, ul {  margin: 0;  padding: 0;}

我们这里例子中用到的webpack只有单一的入口,其它的模块需要通过 import, require, url等与入口文件建立其关联,为了让webpack能找到”main.css“文件,我们把它导入”main.js “中,如下

//main.jsimport React from 'react';import {render} from 'react-dom';import Greeter from './Greeter';import './main.css';//使用require导入css文件render(
, document.getElementById('root'));

通常情况下,css会和js打包到同一个文件中,并不会打包为一个单独的css文件,不过通过合适的配置webpack也可以把css打包为单独的文件的

二、CSS module

被称为CSS modules的技术意在把JS的模块化思想带入CSS中来,通过CSS模块,所有的类名,动画名默认都只作用于当前模块。Webpack对CSS模块化提供了非常好的支持,只需要在CSS loader中进行简单配置即可,然后就可以直接把CSS的类名传递到组件的代码中,这样做有效避免了全局污染。具体的代码如下

module.exports = {    ...    module: {        rules: [            {                test: /(\.jsx|\.js)$/,                use: {                    loader: "babel-loader"                },                exclude: /node_modules/            },            {                test: /\.css$/,                use: [                    {                        loader: "style-loader"                    }, {                        loader: "css-loader",                        options: {                            modules: true, // 指定启用css modules                            localIdentName: '[name]__[local]--[hash:base64:5]' // 指定css的类名格式                        }                    }                ]            }        ]    }};

我们在app文件夹下创建一个Greeter.css文件来进行一下测试

/* Greeter.css */#root {  background-color: #eee;  padding: 10px;  border: 3px solid #ccc;}

导入#root到Greeter.js中

import React, {Component} from 'react';import config from './config.json';import styles from './Greeter.css';//导入class Greeter extends Component{  render() {    return (      
//使用cssModule添加类名的方法 {config.greetText}
); }}export default Greeter

应用了css module后的样式

转载于:https://www.cnblogs.com/JinXinYuan/p/10469838.html

你可能感兴趣的文章
Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机
查看>>
Hello China操作系统STM32移植指南(一)
查看>>
cocos2dx CCEditBox
查看>>
VC++2012编程演练数据结构《8》回溯法解决迷宫问题
查看>>
第一阶段冲刺06
查看>>
WIN下修改host文件并立即生效
查看>>
十个免费的 Web 压力测试工具
查看>>
ckeditor 粘贴后去除html标签
查看>>
Mysql DISTINCT问题
查看>>
sort和sorted的区别
查看>>
UI自动化
查看>>
Elasticsearch-基础介绍及索引原理分析
查看>>
AJAX 学习笔记
查看>>
String.format(),字符拼接
查看>>
dbutils开源项目用法
查看>>
JSP获取当前日期时间
查看>>
undefined reference to `_sbrk', `_write', `_lseek', `_read'
查看>>
基于zuul 实现API 网关
查看>>
定义自己的布局RelativeLayout 绘制网格线
查看>>
redis
查看>>