在每个样式表配置中自动导入 sass 部分
Auto-import sass partials in every stylesheet configutation
最近我开始使用 CSS 模块来处理 NextJS。为了消除重复,我想在每个样式表中自动导入带有混合、变量等的部分。
使用 GatsbyJS 我发现了如何在项目的每个样式表中自动导入一些特定的 SASS 部分。设置如下所示:
{
resolve: `gatsby-plugin-sass`,
options: {
data: '@import "_reset.scss", "_typography.scss", "_mixins.scss", "_extends.scss", "_themes.scss";',
includePaths: [
'src/styles/partials',
],
},
},
现在我的 next.settings.js 看起来像这样:
const path = require("path");
const withSass = require("@zeit/next-sass");
const partials = [
"_reset.scss",
"_variables.scss",
"_themes.scss",
"_typography.scss",
"_mixins.scss",
"_extends.scss",
];
module.exports = withSass({
cssModules: true,
webpack: config => {
config.resolve.alias["components"] = path.join(__dirname, "components");
return config;
},
});
如果可能,我怎样才能在每个样式表中自动取消包含部分内容?
问题解决,感谢@eric-tan 回复:
所有部分都在一个“_utilty.scss”部分中导入,包含在 sassLoaderOptions 中:
-> 数据:导入部分本身;
-> includePaths:导入部分所在的位置。
const path = require("path");
const withSass = require("@zeit/next-sass");
module.exports = withSass({
cssModules: true,
sassLoaderOptions: {
data: '@import "_utility.scss";',
includePaths: [
path.resolve(__dirname, "styles/"),
]
},
webpack: config => {
config.resolve.alias["components"] = path.join(__dirname, "components");
return config;
},
});
我们可以像这样使用 sass 加载器:
{
// Loads a SASS/SCSS file and include the partial files before compilation
loader: 'sass-loader',
options: {
data:
'@import "foo-partial";\n ' +
'@import "bar-partial";',
includePaths: [
path.resolve(__dirname, '../src/assets/styles')
]
}
}
和nextSass提供sass loader option,您可以尝试在您的设置中结合使用它们。
在较新版本的 sass-loader 中,上述方法不再有效,因为数据选项不再受支持。而不是:
options: {
data: `@import "${__dirname}/sass/variables";`,
}
使用:
options: {
additionalData: `@import "${__dirname}/sass/variables";`,
}
最近我开始使用 CSS 模块来处理 NextJS。为了消除重复,我想在每个样式表中自动导入带有混合、变量等的部分。
使用 GatsbyJS 我发现了如何在项目的每个样式表中自动导入一些特定的 SASS 部分。设置如下所示:
{
resolve: `gatsby-plugin-sass`,
options: {
data: '@import "_reset.scss", "_typography.scss", "_mixins.scss", "_extends.scss", "_themes.scss";',
includePaths: [
'src/styles/partials',
],
},
},
现在我的 next.settings.js 看起来像这样:
const path = require("path");
const withSass = require("@zeit/next-sass");
const partials = [
"_reset.scss",
"_variables.scss",
"_themes.scss",
"_typography.scss",
"_mixins.scss",
"_extends.scss",
];
module.exports = withSass({
cssModules: true,
webpack: config => {
config.resolve.alias["components"] = path.join(__dirname, "components");
return config;
},
});
如果可能,我怎样才能在每个样式表中自动取消包含部分内容?
问题解决,感谢@eric-tan 回复:
所有部分都在一个“_utilty.scss”部分中导入,包含在 sassLoaderOptions 中: -> 数据:导入部分本身; -> includePaths:导入部分所在的位置。
const path = require("path");
const withSass = require("@zeit/next-sass");
module.exports = withSass({
cssModules: true,
sassLoaderOptions: {
data: '@import "_utility.scss";',
includePaths: [
path.resolve(__dirname, "styles/"),
]
},
webpack: config => {
config.resolve.alias["components"] = path.join(__dirname, "components");
return config;
},
});
我们可以像这样使用 sass 加载器:
{
// Loads a SASS/SCSS file and include the partial files before compilation
loader: 'sass-loader',
options: {
data:
'@import "foo-partial";\n ' +
'@import "bar-partial";',
includePaths: [
path.resolve(__dirname, '../src/assets/styles')
]
}
}
和nextSass提供sass loader option,您可以尝试在您的设置中结合使用它们。
在较新版本的 sass-loader 中,上述方法不再有效,因为数据选项不再受支持。而不是:
options: {
data: `@import "${__dirname}/sass/variables";`,
}
使用:
options: {
additionalData: `@import "${__dirname}/sass/variables";`,
}