作为 morgler 答案的补充,这是我最终得到的类似解决方案(包括 Sass 和 PurgeCSS)。
我选择了 CLI 解决方案,因为 gatsby-plugin-postcss-sass 目前在 Sass 之前运行 PostCSS(这会破坏 Tailwind),而且目前通过 Webpack 配置 Gatsby 的 PostCSS 插件有点困难。
我包含了 Sass,以便我可以将 main.sass 分解为更易于管理的部分,并添加了 PurgeCSS,以便我可以删除生产中任何未使用的 Tailwinds 类。我发现 PurgeCSS 比 PurifyCSS 更有效,这就是我选择不使用 gatsby-plugin-purify-css 的原因。
首先,创建一个具有以下结构的src/styles 文件夹(随意为您的项目自定义此文件夹并相应地调整以下设置):
src/
styles/
builds/
after-postcss/
main.css
after-purgecss/
main.css
after-sass/
main.css
// other subfolders for sass partials...
main.sass
安装必要的依赖:
npm i node-sass-chokidar postcss-cli purgecss
将以下内容添加到gatsby-node.js(以禁用 Gatsby 的默认 PostCSS 插件):
const ExtractTextPlugin = require('extract-text-webpack-plugin')
exports.modifyWebpackConfig = ({ config, stage }) => {
switch (stage) {
case 'develop':
// Remove postcss from Gatsby's dev process:
config.removeLoader(`css`)
config.loader(`css`, {
test: /\.css$/,
loaders: [`style`, `css`]
})
break
case 'build-css':
// Remove postcss from Gatsby's build process:
config.removeLoader(`css`)
config.loader(`css`, {
test: /after-purgecss\/main\.css/,
loader: ExtractTextPlugin.extract([`css?minimize`])
})
break
}
return config
}
将postcss.config.js 文件添加到项目根目录:
const tailwind = require('tailwindcss')
const cssnext = require('postcss-cssnext')
module.exports = {
plugins: [
// your file's name or path may differ:
tailwind('./src/styles/tailwind.config.js'),
cssnext()
// add any other postcss plugins you like...
]
}
将以下脚本添加到package.json:
"scripts": {
"watch:sass": "node-sass-chokidar --source-map true src/styles/main.sass -o src/styles/builds/after-sass -w",
"watch:postcss": "postcss src/styles/builds/after-sass/main.css -o src/styles/builds/after-postcss/main.css -w",
"watch:styles": "npm run watch:sass & npm run watch:postcss",
"build:sass": "node-sass-chokidar src/styles/main.sass -o src/styles/builds/after-sass",
"build:postcss": "postcss src/styles/builds/after-sass/main.css -o src/styles/builds/after-postcss/main.css",
"build:purgecss":
"purgecss --css src/styles/builds/after-postcss/main.css --con public/index.html src/**/*.js -o src/styles/builds/after-purgecss",
"build:styles": "npm run build:sass && npm run build:postcss && npm run build:purgecss",
"develop": "gatsby develop & npm run watch:styles",
"build": "npm run build:styles && gatsby build"
// ...
},
在开发中,运行 npm run develop 而不是 gatsby develop。只要对 main.sass 或其任何导入进行更改,watch: 脚本就会运行 Sass + PostCSS(按此顺序)。
要构建站点,请运行 npm run build 而不是 gatsby build。 build: 脚本将运行 Sass + PostCSS(没有监视任务)+ PurgeCSS(按此顺序)。
将以下内容添加到layouts/index.js 以在开发期间导入main.css 的after-postcss 版本和在生产期间导入after-purgecss 版本:
switch (process.env.NODE_ENV) {
case `development`:
require('../styles/builds/after-postcss/main.css')
break
case `production`:
require('../styles/builds/after-purgecss/main.css')
break
}
希望对某人有所帮助!如果有人知道如何将其转换为适用于 Gatsby 的 Webpack 等价物,请随时在此处发布。