New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

themes-switch

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

themes-switch

Toolset for switch multiple themes in application based on webpack

latest
Source
npmnpm
Version
1.1.0
Version published
Weekly downloads
143
10%
Maintainers
1
Weekly downloads
 
Created
Source

themes-switch

Features

  • Multiple themes supported via custom variables.
  • Generating themes via webpack.
  • Themes switch without page reload.
  • Supported formats: css, less, postcss, sass.

For Hot reload

  • Hot-reload is supported in v1.1.x, new theme files will be generated when a reload is triggered.
  • When hot-reload is enabled, the temp directory will not be cleared if webpack-dev-server was running.
  • To improve performance, dynamic addition of new theme files is not supported, please restart the server when adding new files.

For Webpack v3

  • Webpack v3 is no longer supported from v1.1.x, please use v1.0.x instead.
  • In the version v1.0.7 themes-switch replaces extract-text-webpack-plugin with mini-css-extract-plugin, and upgrade peerDependency to Webpack 4.3.x. Now the option themesLoader is deprecated. If you are using Webpack 3.x and extract-text-webpack-plugin, view the docs here.

Installation

npm install themes-switch --save-dev

Usage

  • Config themes-switch in webpack.config.js, and put MiniCssExtractPlugin.loader in your less/sass/postcss/css loaders.
const ThemesGeneratorPlugin = require('themes-switch/ThemesGeneratorPlugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  entry: {
    main: './src/main.js'
  },
  output: {
    filename: '[name]-[contenthash].js',
    chunkFilename: '[name]-[contenthash].js',
    path: `${__dirname}/build`,
    publicPath: ''
  },
  module: {
    rules: [
      // ...
      {
        test: /\.(less|css)$/,
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
      }
    ]
  },
  plugins: [
    new ThemesGeneratorPlugin({
      srcDir: 'src',
      themesDir: 'src/assets/themes',
      outputDir: 'static/css',
      defaultStyleName: 'default.less'
    })
  ]
};
  • Create following directory for themes, and set it to option themesDir:
src
  - themes
    - dark.less
    - default.less
    - light.less
  • Import your default theme into default.less:
@import 'light.less';
  • Specify theme variables:
@color-main: #222A42;
@color-text: #FFF;
  • Import default.less when using theme variables:
@import 'default.less';

.main {
  background: @color-main;
}
  • ThemesGeneratorPlugin scans files in themesDir and files that import default.less, then generates separated files for all themes automatically.

  • You can access the themes info via process.themes in your code, value such as { 'theme-dark': 'css/dark.css', 'theme-light': 'css/light.css' }, or call getThemes method directly.

import { getThemes } from 'themes-switch';

// ...
const themes = getThemes();
// ...
  • Call switchTheme method to switch to new theme by pass theme name.

Switch themes in your code

import { switchTheme } from 'themes-switch';

// ...
switchTheme({ theme: 'themes-dark' });
// ...

Options

NameDescriptionTypeDefault Value
srcDirSouce code directory{String}
themesDirDirectory of themes{String}
outputDirDirectory of generated files{String}
defaultStyleNameFile name of default style, specify it when you use different style formats{String}default
clearTempDelete temp directory when webpack was done{Boolean}true
disableDisable the plugin{Boolean}false
useStaticThemeNameWhether to add random number to file names of themes{Boolean}false
ignoredFilesInThemesDirFiles that will be ignored in themes directory{String}
usePureCSSIf you only use pure CSS, you need to explicitly declare{Boolean}false
enableHotReloadWhether to generate new files for webpack hot reload{Boolean}false

Methods

switchTheme

switchTheme({ theme: 'themes-dark', onLoad: onLoadFunc });

Options

  • theme: new theme name, such as theme-dark.
  • onLoad: callback when new link was loaded.

changeTheme

changeTheme('themes-dark', 'css/dark.css', onLoadFunc);

Options

  • theme: new theme name, such as theme-dark.
  • themeUrl: new theme url, such as css/dark.css. You can get the value from process.themes
  • onLoad: callback when new link was loaded.

getThemes

const themes = getThemes();
// { 'theme-dark': 'css/dark.css', 'theme-light': 'css/light.css' }

ThemesGeneratorPlugin.clearTemp

It will delete temp directory. You can call the method as needed, e.g. when you stop webpack-dev-server in development mode.

Keywords

theme

FAQs

Package last updated on 10 Aug 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts