跳到主要内容

如何在 Next.js 中配置 PostCSS

默认行为

Next.js 使用 PostCSS 编译其内置 CSS 支持的 CSS。

开箱即用,无需配置,Next.js 使用以下转换编译 CSS:

默认情况下,CSS Grid自定义属性(CSS 变量)不编译以支持 IE11。

要为 IE11 编译 CSS Grid Layout,你可以在 CSS 文件顶部放置以下注释:

/* autoprefixer grid: autoplace */

你也可以通过配置 autoprefixer 在整个项目中启用 IE11 对 CSS Grid Layout 的支持,如下面的配置所示(已折叠)。 有关更多信息,请参见下面的"自定义插件"

点击查看启用 CSS Grid Layout 的配置
postcss.config.json
{
"plugins": [
"postcss-flexbugs-fixes",
[
"postcss-preset-env",
{
"autoprefixer": {
"flexbox": "no-2009",
"grid": "autoplace"
},
"stage": 3,
"features": {
"custom-properties": false
}
}
]
]
}

CSS 变量不编译是因为无法安全地这样做。 如果你必须使用变量,考虑使用类似 Sass 变量 的东西,它们被 Sass 编译掉。

自定义目标浏览器

Next.js 允许你通过 Browserslist 配置目标浏览器(用于 Autoprefixer 和编译的 CSS 功能)。

要自定义 browserslist,在你的 package.json 中创建一个 browserslist 键,如下所示:

package.json
{
"browserslist": [">0.3%", "not dead", "not op_mini all"]
}

你可以使用 browsersl.ist 工具来可视化你正在定位的浏览器。

CSS 模块

无需配置即可支持 CSS 模块。要为文件启用 CSS 模块,将文件重命名为具有 .module.css 扩展名。

你可以在这里了解更多关于 Next.js 的 CSS 模块支持

自定义插件

警告:当你定义自定义 PostCSS 配置文件时,Next.js 完全禁用默认行为。 确保手动配置你需要编译的所有功能,包括 Autoprefixer。 你还需要手动安装包含在你的自定义配置中的任何插件,即 npm install postcss-flexbugs-fixes postcss-preset-env

要自定义 PostCSS 配置,在项目根目录创建一个 postcss.config.json 文件。

这是 Next.js 使用的默认配置:

postcss.config.json
{
"plugins": [
"postcss-flexbugs-fixes",
[
"postcss-preset-env",
{
"autoprefixer": {
"flexbox": "no-2009"
},
"stage": 3,
"features": {
"custom-properties": false
}
}
]
]
}

提示:Next.js 也允许文件命名为 .postcssrc.json,或者从 package.json 中的 postcss 键读取。

也可以使用 postcss.config.js 文件配置 PostCSS,这在你想基于环境条件包含插件时很有用:

postcss.config.js
module.exports = {
plugins:
process.env.NODE_ENV === 'production'
? [
'postcss-flexbugs-fixes',
[
'postcss-preset-env',
{
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
features: {
'custom-properties': false,
},
},
],
]
: [
// 开发中无转换
],
}

提示:Next.js 也允许文件命名为 .postcssrc.js

不要使用 require() 来导入 PostCSS 插件。插件必须作为字符串提供。

提示:如果你的 postcss.config.js 需要在同一项目中支持其他非 Next.js 工具,你必须使用可互操作的对象格式:

module.exports = {
plugins: {
'postcss-flexbugs-fixes': {},
'postcss-preset-env': {
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
features: {
'custom-properties': false,
},
},
},
}