package.json

{
    "build:cleanup": "rm -rf out dist",
    "build:css:prepare": "mkdir -p out/src",
    "build:css:obfuscation": "NODE_ENV=obfuscation postcss src/styles/tailwind.css  --dir out/src/styles",
    "build:css": "yarn build:css:prepare && yarn build:css:obfuscation",
    "build:js": "yarn vite build",
    "build": "yarn build:cleanup && yarn build:css && yarn build:js",
}

postcss.config.js

const isProd = process.env.NODE_ENV === 'production';
const isObfuscation = process.env.NODE_ENV === 'obfuscation';
 
module.exports = {
  plugins: [
    (!isProd || isObfuscation) && require('tailwindcss'),
    (!isProd || isObfuscation) && require('autoprefixer'),
    isObfuscation &&
      // @see https://github.com/n4j1Br4ch1D/postcss-obfuscator
      require('postcss-obfuscator')({
        enable: true,
        srcPath: 'src',
        desPath: 'out/src',
        jsonsPath: 'out/css-obfuscator',
        formatJson: true,
        extensions: ['.svelte'],
        classIgnore: ['resize', 'translate', 'transform', 'ease-out', 'ease-in-out'],
      }),
  ],
};

vite.config.ts

import * as path from 'path';
 
import { defineConfig } from 'vite';
 
const isProd = process.env.NODE_ENV === 'production';
 
// https://vitejs.dev/config/
export default defineConfig({
  //...
  resolve: {
    alias: {
      '~': path.resolve(__dirname, isProd ? './out/src' : './src'),
    },
  },
  build: {
    copyPublicDir: true,
    lib: {
      name: 'phocus',
      entry: path.resolve(__dirname, './out/src/index.ts'),
    },
  },
});
 

문제점

  • class:* 문법을 제대로 파싱하지 못함…
  • style:transition="transform ..." style 안을 파싱해버림