css-loader和style-loader关系原理及作用

1. css-loader

用webpack打包就需要用到css-loader和style-loader,首先不提style-loader,只用css-loader看一下会是什么效果

webpack.cofnig.js [ rules ] 配置如下

 {
      test: /.css$/,
      loader: 'css-loader',
      exclude: /(node_modules|bower_components)/
}

public.css内容如下

.rect{
    background-color: red;
    width: 100px;
    height: 100px;
}

index.js中直接导入看下效果

import './public.css';

let div = document.createElement("div");
div.className = "rect";
div.innerText = "hello div";
document.getElementsByTagName("body")[0].appendChild(div);

运行结果

运行结果

样式内容并没有应用到div上面,原因是css-loader只是帮我们解析了css文件里面的css代码,
默认webpack是只解析js代码的,所以想要应用样式我们要把解析完的css代码拿出来加入到
style标签中。

更改下index.js看一下css解析后的内容是什么格式的

import css from './public.css';

console.log(css);

运行结果

css-loader解析后数据格式

根据这个格式我们更改一下index.js代码

import css from './public.css';

let div = document.createElement("div");
div.className = "rect";
div.innerText = "hello div";

let body = document.getElementsByTagName("body")[0];

let style = document.createElement("style");
style.innerText = css[0][1];

body.appendChild(style);
body.appendChild(div);

运行结果

生效的结果

我们发现style的样式被成功应用到div上面了,这是我们手动挂载css-loader解析的内容到style标签下,
并且将style标签加入到html文档中,但是这样手动做很麻烦,所以就有了style-loader

2. style-loader

如果你看懂我上面说的,那么你应该已经猜测到了style-loader作用了,style-loader就是帮我们
直接将css-loader解析后的内容挂载到html页面当中,我们来看一下

webpack.cofnig.js [ rules ] 配置如下

{
      test: /.css$/,
      loader: 'style-loader!css-loader',
      exclude: /(node_modules|bower_components)/
}

public.css内容如下

.rect{
    background-color: red;
    width: 100px;
    height: 100px;
}

index.js内容如下

import './public.css';

let div = document.createElement("div");
div.className = "rect";
div.innerText = "hello div";
document.getElementsByTagName("body")[0].appendChild(div);

运行结果

依然生效

index.js中的内容是不是清爽许多,我们不用再考虑自己挂载css-loader解析的内容了,style-loader已经
帮我们这么做了,是不是很有意思。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • webpack使用学习 本分享学习借鉴webpack中文官网,官网链接(中文文档):https://www.web...
    腿毛怪丶叔叔阅读 899评论 0 5
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,513评论 1 32
  • webpack 是什么? 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(mo...
    IT老马阅读 3,355评论 2 27
  • 1. 新建一个文件夹,命名为 webpack-cli , webpack-cli 就是你的项目名,项目名建议使用小...
    鲁大师666阅读 1,531评论 1 3
  • preprocessing operations common operations for the three ...
    榆鸦k阅读 243评论 0 0