我的网站的结构看起来像
src/
components/
Footer/
index.jsx
style.scss
Header/
index.jsx
style.scss
Navbar/
index.jsx
style.scss
...
在我的每个index.jsx
文件中,都有文件import './style.scss'
。
在我最近开发的Gatsby网站上,即使我可能有几十个包含的组件,我的头部也只能看到一个样式标签import ./style.scss
。
我现在正在开发一个非盖茨比,React和Webpack网站,当我的组件包含import ./style.scss
大量时间时,使用相同的方法,但是看起来每个导入的样式文件都有一个样式标签。
我想知道盖茨比(Gatsby)的作用,以及如何在非盖茨比(Natsby)网站中包含相同类型的功能
更新
所以看起来在安装MiniCssExtractPlugin之后,我能够将所有的scss文件分组为一个css文件,
然后从更改我的webpack.config
...
module: {
rules: [
...
{
test: /\.(scss|css)$/,
use: [
'style-loader', // creates style nodes from JS strings
{
loader: 'css-loader', // translates CSS into CommonJS
options: {
importLoaders: 1
}
},
'postcss-loader', // post process the compiled CSS
'sass-loader' // compiles Sass to CSS, using Node Sass by default
]
},
...
成为
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
...
module: {
rules: [
...
{
test: /\.(scss|css)$/,
use: [
MiniCssExtractPlugin.loader, // creates style nodes from JS strings
{
loader: 'css-loader', // translates CSS into CommonJS
options: {
importLoaders: 1
}
},
'postcss-loader', // post process the compiled CSS
'sass-loader' // compiles Sass to CSS, using Node Sass by default
]
},
...
plugins: [
...
new MiniCssExtractPlugin({
filename: "style.css",
chunkFilename: "[name].css"
})
]
...
但是控制台中有很多警告,如下所示
有谁知道如何解决这些警告?
[./node_modules/css-loader/dist/runtime/api.js] 2.46 KiB {mini-css-extract-plugin} [built]
Child mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--5-1!node_modules/postcss-loader/dist/cjs.js!node_modules/sass-loader/dist/cjs.js!src/components/comp1/style.scss:
Entrypoint mini-css-extract-plugin = *
[./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp1/style.scss] ./node_modules/css-loader/dist/cjs.js??ref--5-1!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp1/style.scss 1.85 KiB {mini-css-extract-plugin} [built]
[./node_modules/css-loader/dist/runtime/api.js] 2.46 KiB {mini-css-extract-plugin} [built]
Child mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--5-1!node_modules/postcss-loader/dist/cjs.js!node_modules/sass-loader/dist/cjs.js!src/components/comp2/style.scss: Entrypoint mini-css-extract-plugin = *
[./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp2/style.scss] ./node_modules/css-loader/dist/cjs.js??ref--5-1!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp2/style.scss 942 bytes {mini-css-extract-plugin} [built]
[./node_modules/css-loader/dist/runtime/api.js] 2.46 KiB {mini-css-extract-plugin} [built]
这项工作是由webpack完成的,而不是由Gatsby完成的。当然,Gatsby是自定义实现的扩展,但是您可以通过添加自定义webpack配置将相同的行为导入另一个项目(也可以在Gatsby中进行)。
webpack使用代码拆分技术捆绑了所有JavaScript,JSON和CSS文件(默认情况下不支持SCSS,应通过添加自定义webpack的配置或通过插件来实现)文件。这使您可以将代码划分为几个捆绑包,这些捆绑包可以根据需要或请求进行加载。
另外,可能对您有用的一件事是使用主要文件收集一些导入。鉴于:
src/
components/
Footer/
index.jsx
style.scss
Header/
index.jsx
style.scss
Navbar/
index.jsx
style.scss
您可以在/src/styles
名为styles.scss
and的文件下创建:
@import 'components/Footer/style';
@import 'components/Header/style';
@import 'components/Navbar/style';
然后将文件导入包含其他文件的顶级组件中。
更新:
您正在讨论的警告是由于样式中的导入顺序错误所致。由于webpack将所有这些样式分块,但是它们会产生警告,因此并不重要。有一个称为的属性ignoreOrder
(默认设置为false
)。您可以通过以下方式修复它:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
plugins: [
new MiniCssExtractPlugin({
ignoreOrder: true, // here
}),
],
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, 'css-loader'],
},
],
},
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句