webpack 如何打包多个主题文件

发布于 2022-09-12 23:27:27 字数 339 浏览 17 评论 0

  1. react项目, 用的sass
  2. 三个主题编译文件 red.sass, blue.sass, yellow.sass
  3. 通过sass-resources-loader 注入主题变量
    在提取css的时候, 如果提取出三个主题的css?
    我看了 https://zhuanlan.zhihu.com/p/... 这个文章 能满足要求,但是extract-text-webpack-plugin 有不能用了呀。MiniCssExtractPlugin好像又不行。改如何解决呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

触ぅ动初心 2022-09-19 23:27:27

我想你生成样式文件是为了动态换肤吧,那其实可以把这个流程从主构建流程中脱离出来,单独构建主题文件就行,可以参考下这个

import { renderSync } from 'sass'
import * as path from 'path'
import * as fs from 'fs'

// allow to import from node_modules
const tildeImporter = (url: string) => {
  if (url.includes('~')) {
    url = url.replace('~', '')

    if (!url.includes('.scss')) {
      url += '.scss'
    }

    url = require.resolve(url)
  }
  return { file: url }
}

async function compileSass(filePath: string) {
  const { css } = renderSync({
    file: filePath,
    importer: tildeImporter,
    outputStyle: 'compressed',
  })
  return css
}
const EXT_REGEXP = /\.\w+$/

function replaceExt(path: string, ext: string) {
  return path.replace(EXT_REGEXP, ext)
}

const THEME_DIR = path.join(__dirname, './themes')
const DIST_DIR = path.join(__dirname, './dist')

const buildThemes = async (dir: string) => {
  const themes: string[] = fs.readdirSync(dir)

  for (let i = 0; i < themes.length; ++i) {
    const filePath = path.join(dir, themes[i])
    const css = await compileSass(filePath)
    const outputPath = replaceExt(path.join(DIST_DIR, themes[i]), '.css')
    fs.writeFileSync(outputPath, css)
  }
}

buildThemes(THEME_DIR)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文