在学习webpack的过程中,想要使用style-loader,sass-loader与css-loader来配置一下css模块化的环境,但是当我开启了css-loader里面的modules为true时,可能是与style-loader存在冲突,发现无法正常使用模块化导入css资源,下面是webpack.config.js的配置
const { resolve } = require('path');
// 会帮你创建一个html 直接引用入口文件
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const cssLoader = {
loader: 'css-loader',
options: {
modules: {
localIdentName: '[local]-[hash:5]',
}
}
};
module.exports = {
entry: {
index: resolve(__dirname, './index.js')
},
output: {
path: resolve(__dirname, '../../../', 'dist'),
filename: '[name].js'
},
module: {
rules: [
{
test: /\.s[ac]ss$/i,
use: [
// 将 JS 字符串生成为 style 节点
{ loader: 'style-loader' },
// 将 CSS 转化成 CommonJS 模块
cssLoader,
// 将 Sass 编译成 CSS
{ loader: 'sass-loader' },
]
},
{
test: /\.css$/i,
use: [
{
loader: 'style-loader',
},
cssLoader,
]
}
]
},
plugins: [
new HtmlWebpackPlugin({
title: 'scss-module',
template: resolve(__dirname, '../../../public', 'index.html')
}),
new CleanWebpackPlugin({
cleanOnceBeforeBuildPatterns: ['dist']
})
]
}
我在js文件中这样导入并且使用css
import styles from './index.css';
console.log(styles);
const divElement = document.createElement('div');
divElement.className = styles['box'];
document.body.appendChild(divElement);
然后在浏览器中发现styles打印的内容为undefined,样式也没有正确的出现,这是为什么呢各位大佬?
当我将style-loader去除,发现可以正常获取styles的内容,并且内容也经过模块化的处理了,但是肯定是需要style-loader来做添加标签的处理的
分开处理试试:
引入的时候: