extract-loader
webpack 加载器从软件包中提取 HTML 和 CSS。
extract-loader 会即时评估给定的源代码并将结果作为字符串返回。它的主要用例是解决来自各自装载器的 HTML 和 CSS 内的 URL。使用 file-loader 将提取器加载器的结果作为单独的文件发送。
import stylesheetUrl from "file-loader!extract-loader!css-loader!main.css";
// stylesheetUrl will now be the hashed url to the final stylesheet
提取器加载器的工作方式与 extract-text-webpack-plugin 类似,意味着它是一个精简的替代方案。评估源代码时,它提供了一个虚假的上下文,它专门用于处理由 html 或 css-loader 生成的代码。因此它可能不适用于其他情况。
安装
npm install extract-loader
例子
用 extract-loader,你可以引用你main.css
的常规entry
。下面webpack.config.js
显示了如何使用开发中的样式加载器加载样式,并将其作为生产中的单独文件加载。
const live = process.env.NODE_ENV === "production";
const mainCss = ["css-loader", path.join(__dirname, "app", "main.css")];
if (live) {
mainCss.unshift("file-loader?name=[name].[ext]", "extract-loader");
} else {
mainCss.unshift("style-loader");
}
module.exports = {
entry: [
path.join(__dirname, "app", "main.js"),
mainCss.join("!")
],
...
};
你甚至可以添加你index.html
为entry
,并从那里只是参考样式表。你只需要告诉 html-loader 也可以选择link:href
:
const indexHtml = path.join(__dirname, "app", "index.html");
module.exports = {
entry: [
path.join(__dirname, "app", "main.js"),
indexHtml
],
...
module: {
rules: [
{
test: indexHtml,
use: [
{
loader: "file-loader",
options: {
name: "[name]-dist.[ext]",
},
},
{
loader: "extract-loader",
},
{
loader: "html-loader",
options: {
attrs: ["img:src", "link:href"],
interpolate: true,
},
},
],
},
{
test: /\.css$/,
loaders: [
{
loader: "file-loader",
},
{
loader: "extract-loader",
},
{
loader: "css-loader",
},
],
},
{
test: /\.jpg$/,
loaders: [
{
loader: "file-loader"
},
],
},
]
}
};
转换
<html>
<head>
<link href="main.css" type="text/css" rel="stylesheet">
</head>
<body>
<img src="hi.jpg">
</body>
</html>
成
<html>
<head>
<link href="7c57758b88216530ef48069c2a4c685a.css" type="text/css" rel="stylesheet">
</head>
<body>
<img src="6ac05174ae9b62257ff3aa8be43cf828.jpg">
</body>
</html>
选项
例:
module.exports = {
output: {
path: path.resolve("./dist"),
publicPath: "dist/"
},
module: {
rules: [
{
test: /\.css$/,
use: [
{
loader: "file-loader",
options: {
name: "assets/[name].[ext]",
},
},
{
loader: "extract-loader",
options: {
publicPath: "../",
}
},
{
loader: "css-loader",
},
],
}
]
}
};
你需要另一种选择?那么你应该考虑一下:
贡献
从打开错误报告到创建拉取请求:每个贡献都受到赞赏和欢迎。如果您打算实施新功能或更改 api,请首先创建问题。这样我们可以确保你的珍贵工作不是徒劳的。
所有拉取请求应该有100%的测试覆盖率(值得注意的例外),并且需要通过所有测试。
- 调用
npm test
运行单元测试
- 调用
npm run coverage
查看测试范围(使用 istanbul)
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com