如何让 Tailwind.css 与 Gatsby.js 一起工作?
How to get Tailwind.css working with Gatsby.js?
有没有人弄到Tailwind.css working with Gatsby.js?
使用 Gatsby 配置 postCSS 插件有点棘手...如果有人设法启动 Tailwind 和 运行 Gatsby,我很想知道怎么做!
由于 this post.
,我设法让这个工作(包括热重新加载)
基本上我必须另外安装 postcss 和 autoprefixer:
npm install autoprefixer postcss-cli
我使用此内容将 postcss.config.js
添加到我的 Gatsby 站点文件夹的根目录(tailwind.js 是我的 Tailwind 配置 - 你的配置可能不同):
const tailwindcss = require('tailwindcss');
module.exports = {
plugins: [
tailwindcss('./tailwind.js'),
require('autoprefixer'),
],
};
然后我向我的 package.json
添加了一个 CSS 监视和构建脚本,并将这些脚本包含在我的默认开发和构建脚本中:
"scripts": {
"build:css": "postcss src/layouts/index.css -o src/layouts/generated.css",
"watch:css": "postcss src/layouts/index.css -o src/layouts/generated.css -w",
"build": "npm run build:css && gatsby build",
"develop": "npm run watch:css & gatsby develop",
...
}
(请注意我的 css 的输入 (index.css) 和输出 (generated.css) 文件名和位置特定于我的项目。请随意使用您自己的约定。 )
如果这对你有用,请告诉我。
作为 morgler 回答的补充,这是我最终得到的类似解决方案(其中包括 Sass 和 PurgeCSS)。
我选择了 CLI 解决方案,因为 gatsby-plugin-postcss-sass
当前 运行s PostCSS before Sass (这打破了 Tailwind),而 Gatsby 的 PostCSS 插件有点难以通过 Webpack 配置此时此刻。
我包含了 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 等价物,请随时 post 此处。
我最近将其添加到 Gatsby 入门默认设置之上,并编写了详细的分步指南。
https://www.michaelfasani.com/2020/installing-tailwind-css-on-top-of-the-gatsby-starter-default/
这是我的设置,并且与 Gatsby 配合得很好:
tailwind.config.js
module.exports = {
mode: "jit",
purge: [
"./src/pages/**/*.{js,ts,jsx,tsx}",
"./src/components/**/*.{js,ts,jsx,tsx}",
],
package.json
"scripts": {
"develop": "gatsby develop",
"start": "gatsby develop",
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean",
"tw:build": "tailwindcss build ./src/styles/global.css -o ./public/styles/global.css",
"tw:prod": "cross-env NODE_ENV=production postcss build ./src/styles/global.css -o ./public/styles/global.css",
"tw:watch": "onchange \"tailwind.config.js\" \"src/**/*.css\" -- npm run tw:build"
},
您还可以使用 cssnano,它是用于清除顺风的非常棒的扩展 css
postcss.config.js
const cssnano = require("cssnano");
module.exports = {
plugins: [
require("tailwindcss"),
cssnano({
preset: "default",
}),
require("autoprefixer"),
],
};
最新的 Tailwind 版本所需的 devDependencies 如下:
package.json devDependencies
"devDependencies": {
"autoprefixer": "^10.3.6",
"gatsby-plugin-postcss": "^4.14.0",
"postcss": "^8.3.9",
"postcss-cli": "^9.0.1",
"tailwindcss": "^2.2.17"
}
}
还要确保将这些包含在 global.css 文件的顶部:
@tailwind base;
@tailwind components;
@tailwind utilities;
有没有人弄到Tailwind.css working with Gatsby.js?
使用 Gatsby 配置 postCSS 插件有点棘手...如果有人设法启动 Tailwind 和 运行 Gatsby,我很想知道怎么做!
由于 this post.
,我设法让这个工作(包括热重新加载)基本上我必须另外安装 postcss 和 autoprefixer:
npm install autoprefixer postcss-cli
我使用此内容将 postcss.config.js
添加到我的 Gatsby 站点文件夹的根目录(tailwind.js 是我的 Tailwind 配置 - 你的配置可能不同):
const tailwindcss = require('tailwindcss');
module.exports = {
plugins: [
tailwindcss('./tailwind.js'),
require('autoprefixer'),
],
};
然后我向我的 package.json
添加了一个 CSS 监视和构建脚本,并将这些脚本包含在我的默认开发和构建脚本中:
"scripts": {
"build:css": "postcss src/layouts/index.css -o src/layouts/generated.css",
"watch:css": "postcss src/layouts/index.css -o src/layouts/generated.css -w",
"build": "npm run build:css && gatsby build",
"develop": "npm run watch:css & gatsby develop",
...
}
(请注意我的 css 的输入 (index.css) 和输出 (generated.css) 文件名和位置特定于我的项目。请随意使用您自己的约定。 )
如果这对你有用,请告诉我。
作为 morgler 回答的补充,这是我最终得到的类似解决方案(其中包括 Sass 和 PurgeCSS)。
我选择了 CLI 解决方案,因为 gatsby-plugin-postcss-sass
当前 运行s PostCSS before Sass (这打破了 Tailwind),而 Gatsby 的 PostCSS 插件有点难以通过 Webpack 配置此时此刻。
我包含了 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 等价物,请随时 post 此处。
我最近将其添加到 Gatsby 入门默认设置之上,并编写了详细的分步指南。
https://www.michaelfasani.com/2020/installing-tailwind-css-on-top-of-the-gatsby-starter-default/
这是我的设置,并且与 Gatsby 配合得很好:
tailwind.config.js
module.exports = {
mode: "jit",
purge: [
"./src/pages/**/*.{js,ts,jsx,tsx}",
"./src/components/**/*.{js,ts,jsx,tsx}",
],
package.json
"scripts": {
"develop": "gatsby develop",
"start": "gatsby develop",
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean",
"tw:build": "tailwindcss build ./src/styles/global.css -o ./public/styles/global.css",
"tw:prod": "cross-env NODE_ENV=production postcss build ./src/styles/global.css -o ./public/styles/global.css",
"tw:watch": "onchange \"tailwind.config.js\" \"src/**/*.css\" -- npm run tw:build"
},
您还可以使用 cssnano,它是用于清除顺风的非常棒的扩展 css
postcss.config.js
const cssnano = require("cssnano");
module.exports = {
plugins: [
require("tailwindcss"),
cssnano({
preset: "default",
}),
require("autoprefixer"),
],
};
最新的 Tailwind 版本所需的 devDependencies 如下:
package.json devDependencies
"devDependencies": {
"autoprefixer": "^10.3.6",
"gatsby-plugin-postcss": "^4.14.0",
"postcss": "^8.3.9",
"postcss-cli": "^9.0.1",
"tailwindcss": "^2.2.17"
}
}
还要确保将这些包含在 global.css 文件的顶部:
@tailwind base;
@tailwind components;
@tailwind utilities;