我有两个问题。
1)CSS Loader和Style Loader是两个webpack加载器。我无法理解两者之间的差异。当他们做同样的工作时,为什么我必须使用两个装载机?
2)上面的Readme.md文件中提到的.useable.less和.useable.css是什么?
答案 0 :(得分:248)
CSS加载器获取一个CSS文件,并通过webpack的imports
功能返回带有url(...)
和require
的CSS:
var css = require("css!./file.css"); // => returns css code from file.css, resolves imports and url(...)
使用返回的CSS实际上
样式加载器使用CSS并实际将其插入到页面中,以便样式在页面上处于活动状态。
他们执行不同的操作,但将它们链接在一起通常很有用,比如Unix管道。例如,如果您使用的是the Less CSS preprocessor,则可以使用
require("style!css!less!./file.less")
到
file.less
变为普通CSS
imports
和url(...)
答案 1 :(得分:45)
css-loader
以字符串形式读取css文件。您可以将其替换为raw-loader
,并在很多情况下获得相同的效果。因为它只是读取文件内容而没有别的,除非你用另一个加载器链接它,否则它基本上没用。
style-loader
获取这些样式,并在包含这些样式的页面<style>
元素中创建<head>
标记。
如果您在使用bundle.js
后查看style-loader
内的javascript,则会在生成的代码中看到评论
// style-loader:通过添加标记
向DOM添加一些css
例如,
<html>
<head>
<!-- this tag was created by style-loader -->
<style type="text/css">
body {
background: yellow;
}
</style>
</head>
<body>
<script type="text/javascript" src="bundle.js" charset="utf-8"></script>
</body>
</html>
该示例来自this tutorial。如果您通过更改行
从管道中删除style-loader
require("!style-loader!css-loader!./style.css");
到
require("css-loader!./style.css");
您会看到<style>
消失。
答案 2 :(得分:13)
回答第二个问题&#34;上面的Readme.md文件中提到的.useable.less和.useable.css是什么?&#34;,默认情况下样式为require'd
时, style-loader模块自动将<script>
标记注入DOM,并且该标记保留在DOM中,直到浏览器窗口关闭或重新加载。样式加载器模块还提供了一个所谓的&#34;引用计数API&#34;这允许开发人员添加样式,并在以后不再需要时删除它们。 API的工作方式如下:
const style = require('style/loader!css!./style.css')
// The "reference counter" for this style starts at 0
// The style has not yet been injected into the DOM
style.use() // increments counter to 1, injects a <style> tag
style.use() // increments counter to 2
style.unuse() // decrements counter to 1
style.unuse() // decrements counter to 0, removes the <style> tag
按照惯例,使用此API加载的样式表有一个扩展名&#34; .usable.css&#34;而不是简单的&#34; .css&#34;如上所述。
答案 3 :(得分:2)
让我从你的问题中回答 1)。 style-loader
和 css-loader
有什么区别?或者:他们做什么?
css-loader
结尾的导入将在 Javascript 中接收一个数组
@import
规则),将文件名和文件内容(已修改)作为字符串css-loader
,那么你必须自己对字符串做一些事情,否则它们只会增加你的包大小style-loader
会将来自 css-loader
的 Javascript 包装在更多的 Javascript 中
<style>
的 CSS 字符串创建 css-loader
元素并将它们注入到 DOM 中style-loader
不能单独使用(你得到一个错误),因为它不读取文件并期望 css-loader
-like Javascript 作为输入答案 4 :(得分:0)
Webpack文档建议将style-loader与css-loader结合使用: