Answers:
CSS加载器获取一个CSS文件,imports
并url(...)
通过webpack的require
功能返回CSS 并通过其解析:
var css = require("css!./file.css"); // => returns css code from file.css, resolves imports and url(...)
它实际上对返回的CSS 不做任何事情。
样式加载器采用CSS并将其实际上插入到页面中,以便样式在页面上处于活动状态。
它们执行不同的操作,但是将它们链接在一起通常很有用,例如Unix管道。例如,如果您使用的是Less CSS预处理器,则可以使用
require("style!css!less!./file.less")
至
file.less
成纯CSS有不太装载机imports
和url(...)
imports
我想你指的@import
指令。默认情况下,此指令不会将导入的CSS规则合并到导入程序中,而是创建另一个GET
请求。您是说这css-loader
将返回合并的输出吗?
css-loader
以字符串形式读取css文件。您可以将其替换raw-loader
为很多情况,并获得相同的效果。由于它仅读取文件内容,而没有其他任何内容,因此除非您将其与另一个加载程序链接在一起,否则它基本上是没有用的。
style-loader
采用这些样式,并<style>
在<head>
包含这些样式的页面元素中创建一个标签。
如果您bundle.js
在使用后查看其中的javascript ,style-loader
您会在生成的代码中看到一条注释,内容为
// style-loader:通过添加标签将一些CSS添加到DOM
例如,
<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>
该示例来自本教程。如果您style-loader
通过更改行从管道中删除
require("!style-loader!css-loader!./style.css");
至
require("css-loader!./style.css");
您会看到<style>
消失了。
css-loader
而不是raw-loader
?
要回答第二个问题“以上Readme.md文件中提到的.useable.less和.useable.css是什么?”,默认情况下,当样式为时require'd
,样式加载器模块会自动将<script>
标签注入DOM,然后该标签会保留在DOM中,直到关闭或重新加载浏览器窗口。样式加载器模块还提供了一个所谓的“引用计数API”,它使开发人员可以添加样式并在以后不再需要它们时将其删除。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加载的样式表具有扩展名“ .usable.css”,而不是如上所述的简单的“ .css”。
Webpack文档建议将style-loader与css-loader结合使用: