我在我的打字稿和webpack项目中使用了MiniCssExtractPlugin。
我的MiniCssExtractPlugin的webpack配置看起来像
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
entry: './src/index.tsx',
mode: "development",
output: {
path: path.resolve(__dirname, "build"),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: "awesome-typescript-loader"
},
{
enforce: "pre",
test: /\.js$/,
loader: "source-map-loader"
},
{
test: /\.scss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
modules: true,
sourceMap: true,
importLoader: 2
}
},
"sass-loader"
]
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: "./index.html"
}),
new MiniCssExtractPlugin({
filename: "foo.css",
chunkFilename: "[id].css"
})],
devtool: "source-map",
resolve: {
extensions: [".js", ".ts", ".tsx"]
}
}
现在我项目中的scss文件有这个片段
h1 {
border-bottom: 3px solid #880055;
display: inline;
}
.container {
font-size: 1.3rem;
}
.is-completed {
text-decoration: line-through;
color: #00ff00;
}
当我的应用程序使用npm start
运行时,我可以看到标题H1的颜色为880055
的下划线。所以这意味着我的scss文件被正确读取。
如果我使用chrome开发人员工具并进入网络标签并查找CSS。我可以看到正在下载的foo.css。如果我查看foo.css的内容
我没有完成"已完成"类。相反,我看到像
这样的东西h1 {
border-bottom: 3px solid #880055;
display: inline; }
.pxcHIyOVHeytUeG27u4TO {
font-size: 1.3rem; }
._1Z5_KVJNKd1X2P3HKM63j {
text-decoration: line-through;
color: #00ff00; }
所以像h1这样的元素类很好,但其他一切都是乱码。发生了什么事?
答案 0 :(得分:6)
当您在CSS配置中设置modules: true
时,您告诉css-loader
使用CSS-Modules将您的类名称范围限定为特定文件。
答案 1 :(得分:4)
您可以在localIndentName
选项中使用css-loader
查询参数来指定您希望生成的类(标识符)在开发和/或生产中的外观。请参阅以下示例,了解为我解决了什么问题。
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
loader: 'css-loader',
options: {
modules: {
localIdentName: '[name]-[local]--[hash:base64:5]',
},
},
},
],
},
};
如果要使用上面示例中的配置,并且要运行,我正在渲染的组件的名称称为HelloWorld
,并且该组件中使用的类为.container
我的应用(dev或prod)并检查devtools中的元素,我的HelloWorld
组件上的类如下所示:
<div class="HelloWorld-container--16ABh"> Hello World </div>
您可以尝试设置为localIdentName
的内容以及显示的哈希数中的多少个字符。
在此处查看localIdentName
查询参数的文档:https://github.com/webpack-contrib/css-loader#localidentname