使用 'nuxt build' 时动态创建的 类 不可用 - tailwindcss nuxtjs
Dynamically created classes not available when using 'nuxt build' - tailwindcss nuxtjs
我有一个与 tailwind 一起使用的 nuxtjs 项目css。
在那个项目中,我为负边距即时生成 类,如下所示:
<div class="mins-1" :class="['-mt-'+ m1*8]"></div>
整个项目在本地运行良好,但如果我 运行 nuxt build; nuxt start;
它编译时没有错误,但动态 类 的 none 似乎工作。
所以我终于发现 nuxt build
进程做了一些 css tree shaking,并且因为这些 类 未包含在 dom 的任何位置,它们未包含在 css 构建过程中。
为了测试这一点,我创建了一个隐藏的 div,如下所示:
<div class="hidden -mt-8 -mt-16 -mt-24 -mt-32 -mt-40 -mt-48 -mt-56 -mt-64 -mt-72 -mt-80">ok needed classes</div>
瞧,这将使我的项目在 nuxt build
之后可行,因为现在 类 需要的 类 存在于 dom 中并将被包括在内。
这看起来很老套!
现在回答我的问题:
在 nuxtjs 项目的构建过程中包含动态创建的 类 的正确方法是什么?
已更新tailwind.config.js(无法在启用 JIT 模式的情况下工作!)
const colors = require("tailwindcss/colors")
module.exports = {
purge: {
enabled: process.env.NODE_ENV === 'production',
content: [
'components/**/*.vue',
'layouts/**/*.vue',
'pages/**/*.vue',
'plugins/**/*.js',
'nuxt.config.js',
// TypeScript
'plugins/**/*.ts',
'nuxt.config.ts'
],
// UPDATE: safelist does NOT work in combination with JIT
options: {
safelist: ['mt-0', '-mt-8', '-mt-16', '-mt-24', '-mt-32', '-mt-40', '-mt-48', '-mt-56', '-mt-64', '-mt-72', '-mt-80'],
}
},
darkMode: false, // or 'media' or 'class'
theme: {
extend: {
colors: {
emerald: colors.emerald,
gray: colors.trueGray,
cyan: colors.cyan
},
},
},
variants: {
extend: {},
},
plugins: [],
}
您可以尝试 PurgeCss 配置的安全列表选项:
// tailwind.config.js
module.exports = {
purge: {
// Configure as you need
content: ['./src/**/*.html'],
// These options are passed through directly to PurgeCSS
options: {
// List your classes here, or you can even use RegExp
safelist: ['bg-red-500', 'px-4', /^text-/],
blocklist: [/^debug-/],
keyframes: true,
fontFace: true,
},
},
// ...
}
编辑:似乎 OP 现在正在使用 JIT tailwind mode, safelist
is not available 用于此模式。生成所需 classes 的最佳方法是将一些存根文件(如 stub.html
放置在源目录中的某处,然后将所有需要的 classes 添加到此文件中,以便 tailwind 可以抢先生成他们的风格。
EDIT2: safelist
现在可用于 jit!但它不支持正则表达式。因为默认情况下不生成 CSS,所以安全列表必须是完整的 class 名称列表。不可能将正则表达式列入安全列表,因为没有预先生成的 class 名称列表来匹配该正则表达式。
看来你用的不是tailwind的JIT,你看一下:它会在本地开发时帮助你,只生成需要的类.
https://tailwindcss.com/docs/just-in-time-mode
然后,您的配置文件应该如下所示
module.exports = {
mode: 'jit',
// These paths are just examples, customize them to match your project structure
purge: [
'./public/**/*.html',
'./src/**/*.{js,jsx,ts,tsx,vue}',
],
...
}
免责声明,我自己(还)没有尝试过,但这应该可以正常工作。即使 IMO,动态 类 也只能在启用 JIT 的情况下使用。
您可以将 Tailwind CSS 版本 3 列入白名单 类。
我在我的 CMS 中使用 HTML 组件,为此我已经将几个 类!
列入白名单
module.exports = {
darkMode: "class",
content: [
"./components/**/*.{js,vue,ts}",
"./layouts/**/*.vue",
"./pages/**/*.vue",
"./plugins/**/*.{js,ts}",
"./nuxt.config.{js,ts}",
],
safelist: [
'border-l-2',
'border-blue-500',
{
pattern: /(bg|text|border)-(red|green|blue|purple|yellow)-(100|200|300|400|500)/,
},
{
pattern: /(h|w)-(12|16|24|32|48|64|72|96)/,
},
'absolute',
'-mt-9',
'-ml-9',
'pl-4',
'overflow-scroll'
],}
我有一个与 tailwind 一起使用的 nuxtjs 项目css。
在那个项目中,我为负边距即时生成 类,如下所示:
<div class="mins-1" :class="['-mt-'+ m1*8]"></div>
整个项目在本地运行良好,但如果我 运行 nuxt build; nuxt start;
它编译时没有错误,但动态 类 的 none 似乎工作。
所以我终于发现 nuxt build
进程做了一些 css tree shaking,并且因为这些 类 未包含在 dom 的任何位置,它们未包含在 css 构建过程中。
为了测试这一点,我创建了一个隐藏的 div,如下所示:
<div class="hidden -mt-8 -mt-16 -mt-24 -mt-32 -mt-40 -mt-48 -mt-56 -mt-64 -mt-72 -mt-80">ok needed classes</div>
瞧,这将使我的项目在 nuxt build
之后可行,因为现在 类 需要的 类 存在于 dom 中并将被包括在内。
这看起来很老套!
现在回答我的问题:
在 nuxtjs 项目的构建过程中包含动态创建的 类 的正确方法是什么?
已更新tailwind.config.js(无法在启用 JIT 模式的情况下工作!)
const colors = require("tailwindcss/colors")
module.exports = {
purge: {
enabled: process.env.NODE_ENV === 'production',
content: [
'components/**/*.vue',
'layouts/**/*.vue',
'pages/**/*.vue',
'plugins/**/*.js',
'nuxt.config.js',
// TypeScript
'plugins/**/*.ts',
'nuxt.config.ts'
],
// UPDATE: safelist does NOT work in combination with JIT
options: {
safelist: ['mt-0', '-mt-8', '-mt-16', '-mt-24', '-mt-32', '-mt-40', '-mt-48', '-mt-56', '-mt-64', '-mt-72', '-mt-80'],
}
},
darkMode: false, // or 'media' or 'class'
theme: {
extend: {
colors: {
emerald: colors.emerald,
gray: colors.trueGray,
cyan: colors.cyan
},
},
},
variants: {
extend: {},
},
plugins: [],
}
您可以尝试 PurgeCss 配置的安全列表选项:
// tailwind.config.js
module.exports = {
purge: {
// Configure as you need
content: ['./src/**/*.html'],
// These options are passed through directly to PurgeCSS
options: {
// List your classes here, or you can even use RegExp
safelist: ['bg-red-500', 'px-4', /^text-/],
blocklist: [/^debug-/],
keyframes: true,
fontFace: true,
},
},
// ...
}
编辑:似乎 OP 现在正在使用 JIT tailwind mode, safelist
is not available 用于此模式。生成所需 classes 的最佳方法是将一些存根文件(如 stub.html
放置在源目录中的某处,然后将所有需要的 classes 添加到此文件中,以便 tailwind 可以抢先生成他们的风格。
EDIT2: safelist
现在可用于 jit!但它不支持正则表达式。因为默认情况下不生成 CSS,所以安全列表必须是完整的 class 名称列表。不可能将正则表达式列入安全列表,因为没有预先生成的 class 名称列表来匹配该正则表达式。
看来你用的不是tailwind的JIT,你看一下:它会在本地开发时帮助你,只生成需要的类.
https://tailwindcss.com/docs/just-in-time-mode
然后,您的配置文件应该如下所示
module.exports = {
mode: 'jit',
// These paths are just examples, customize them to match your project structure
purge: [
'./public/**/*.html',
'./src/**/*.{js,jsx,ts,tsx,vue}',
],
...
}
免责声明,我自己(还)没有尝试过,但这应该可以正常工作。即使 IMO,动态 类 也只能在启用 JIT 的情况下使用。
您可以将 Tailwind CSS 版本 3 列入白名单 类。 我在我的 CMS 中使用 HTML 组件,为此我已经将几个 类!
列入白名单module.exports = {
darkMode: "class",
content: [
"./components/**/*.{js,vue,ts}",
"./layouts/**/*.vue",
"./pages/**/*.vue",
"./plugins/**/*.{js,ts}",
"./nuxt.config.{js,ts}",
],
safelist: [
'border-l-2',
'border-blue-500',
{
pattern: /(bg|text|border)-(red|green|blue|purple|yellow)-(100|200|300|400|500)/,
},
{
pattern: /(h|w)-(12|16|24|32|48|64|72|96)/,
},
'absolute',
'-mt-9',
'-ml-9',
'pl-4',
'overflow-scroll'
],}