reactjs - mini-css-extract-plugin:仅在导入 JS 文件时导入 CSS 文件
问题描述
我正在使用 webpack@5.24.2 和 mini-css-extract-plugin@1.3.9 在 React 中制作一个摇树组件库,它必须适用于客户端渲染和服务器端渲染。我希望能够执行以下操作,在库中创建“N”个组件,每个组件都有其特定的“SCSS”文件,如下所示:
// KhalComponent.tsx
import React from 'react';
import './KhalComponent.scss';
const KhalComponent = () => {
return <div className="khal-component">Khal Component</div>;
};
export default KhalComponent;
// KhalComponent.scss
.khal-component {
padding: 2rem;
background: red;
}
当外部项目执行以下操作时:
import KhalComponent from 'some-library/KhalComponent'
它会获取组件及其样式。我有这个工作,style-loader
但我读过这不是一个正确的生产配置,它不适用于 SSR(使用 NextJS),因为style-loader
它试图注入添加它们的样式 document.createElement(文档没有' t 存在于服务器端)。所以我尝试迁移到使用mini-css-extract-plugin
来实现这个客户端和服务器端。我看到mini-css-extract-plugin
确实创建了单独的 CSS 文件,但是(据我所知)它不会让相应的 JS 文件(KhalComponent.js)知道每当将 KhalComponent 导入另一个项目时它都需要加载 CSS。
我没有在这个外部组件库中生成 HTML 文件,因为它只是为了导入组件 JS 和 CSS 内容。
webpack 配置如下:
const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const entries = require('./entries');
const LIB_NAME = 'lib';
module.exports = {
entry: entries,
output: {
filename: '[name].js',
path: path.resolve(__dirname, LIB_NAME),
},
plugins: [new CleanWebpackPlugin(), new MiniCssExtractPlugin()],
module: {
rules: [
{
test: /\.s?css$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: ['babel-loader'],
},
],
},
externals: [
{
react: 'react',
'react-dom': 'react-dom',
},
],
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
devtool: 'source-map',
devServer: {
contentBase: './lib',
hot: true,
},
};
并且entries.js
是:
const path = require('path');
const SRC_DIR = path.resolve('src');
module.exports = {
// Components
KhalComponent: path.join(SRC_DIR, 'KhalComponent'),
LinkComponent: path.join(SRC_DIR, 'LinkComponent'),
};
我错过了什么或者我应该使用什么工具来做到这一点?非常感谢您!
解决方案
推荐阅读
- lua - 如何在lua中的同一个“for”上添加一个以上的数组
- sql-server - 将具有多个选项卡的 Excel 工作表中的数据插入 SQL Server 到多个表中
- python - 运算符不存在:jsonb ~~* 未知错误
- python-3.x - 为什么使用multiprocessing.Pool(N)时进程数会影响输出格式
- mqtt - 使用 MQTT 同时发布/订阅
- python - 如果段长度高于特定值,如何递归离散段
- python - 将接收到的输出转换为python中的数据框
- mysql - SQL 检索两个日期之间的所有行以及按日期排序的日期之前的特定行数
- c# - 在 UWP 应用程序的“添加引用”对话框中显示我的 .NET Standard 程序集
- php - 无法将两个查询合并为一个 json 对象