Svelte、Typescript、TailwindCSS 暗模式支持

Posted

技术标签:

【中文标题】Svelte、Typescript、TailwindCSS 暗模式支持【英文标题】:Svelte, Typescript, TailwindCSS dark mode support 【发布时间】:2021-07-21 01:47:51 【问题描述】:

我正在开发一个 Svelte3 项目,试图获得 TailwindCSS DarkMode 支持。从我读过的文档来看,它应该在本地工作吗?目前这是一个非常样板的 Svelte 项目,配置了 Tailwind、Typescript 和 PostCSS。 Tailwind 类在大多数情况下都在工作,但是,暗模式类不是……我似乎无法正确配置……有人可以帮我吗?

index.html

<!DOCTYPE html>
<html lang="en" class="dark">

<head>
  <meta charset='utf-8'>
  <meta name='viewport' content='width=device-width,initial-scale=1'>

  <title>Svelte app</title>

  <link rel='icon' type='image/png' href='/favicon.png'>
  <link rel='stylesheet' href='/global.css'>
  <link rel='stylesheet' href='/build/bundle.css'>
  <!-- Paste me in public/index.html -->
  <link rel='stylesheet' href='/index.css'>

  <script defer src='/build/bundle.js'></script>
</head>

<body class="dark">
</body>

</html>

tailwind.config.js

module.exports = 
  darkMode: 'class',
  purge: ["./src/**/*.svelte", "./src/**/*.html"],
  theme: 
    extend: ,
  ,
  variants: ,
  plugins: [],

rollup.config.js

export default 
  input: 'src/main.ts',
  output: 
    sourcemap: true,
    format: 'iife',
    name: 'app',
    file: 'public/build/bundle.js'
  ,
  plugins: [
    svg(
      stringify: true
    ),
    svelte(
      dev: !production,
      hydratable: true,
      preprocess: sveltePreprocess(
        sourceMap: !production,
        defaults: 
          style: "postcss",
        ,
        postcss: 
          plugins: [
            require("tailwindcss"),
            require("autoprefixer"),
          ],
        ,
      ),
      css: css => 
        css.write('public/build/bundle.css');
      
    ),
    resolve(
      browser: true,
      dedupe: ['svelte']
    ),
    commonjs(),
    typescript( sourceMap: !production ),
    !production && serve(),
    !production && livereload('public'),
    production && terser()
  ],
  watch: 
    clearScreen: false
  
;

postcss.config.js

module.exports = (
  plugins: [
    require("tailwindcss"),
    require("autoprefixer")
  ],
)

tsconfig.js


  "extends": "@tsconfig/svelte/tsconfig.json",

  "include": ["src/**/*"],
  "exclude": ["node_modules/*", "__sapper__/*", "public/*"],

【问题讨论】:

您是否有示例说明如何在组件中使用深色变体? @JHeth 使用 Tailwinds 示例,类似于:&lt;div class="bg-gray-100 dark:bg-black"&gt;...&lt;/div&gt; 这是正确的用法。您是否尝试过在组件中应用“暗”类?在 HTML 文件中应用它可能不会被采纳。一个简单的测试是将一个带有深色变体的 div 包装在一个带有深色类的 div 中。将黑暗课程列入安全名单也可能会有所帮助。 【参考方案1】:

您应该为此使用顺风的 JIT 模式。因为tailwind 会生成dark: 类的每个变体,所以生成的文件会很大。使用 JIT 编译生成的文件与生产中的文件相同

// tailwind.config.js

module.exports = 
  mode: 'jit',
  purge: [ ... ],
  ...

这是相对较新的添加,所以构建工具还没有赶上。您必须单独运行 tailwind build,编译新的 CSS 文件,然后将该文件包含到您的 Svelte 构建中。

https://tailwindcss.com/docs/just-in-time-mode

【讨论】:

以上是关于Svelte、Typescript、TailwindCSS 暗模式支持的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Typescript 文件中导入 Svelte 组件?

Typescript + Svelte - 如何添加类型以传播组件道具

Svelte + Typescript = 如何使错误消失?

【Svelte】官方Typescript支持+ TailwindCSS + SCSS

将 Svelte 组件导入 TypeScript 文件时是不是可以保留 prop 类型信息?

从 Svelte Kit 中的加载函数调用 prisma 客户端