dts-css-modules-loader

webpack loader to generate typings for css modules

dts-css-modules-loader

Replacement for the typings-for-css-modules-loader. This loader does not make any changes in content of styles, just creates *.d.ts file during the work. It is assumed that the content will be preprocessed first by css-loader. Currently supported versions 2, 3 and 4 of the css-loader.

Installation

npm i -D dts-css-modules-loader
# or
yarn add -D dts-css-modules-loader

Usage

{
  test: /\.scss$/,
  use: [
    'style-loader',
    {
      loader: 'dts-css-modules-loader',
      options: {
        namedExport: true,
        banner: "// This file is generated automatically"
      }
    },
    {
      loader: 'css-loader',
      options: {
        // options for the v4 of css-loader
        modules: {
          exportLocalsConvention: 'camelCaseOnly',
          localIdentName: '[local]'
        }
      }
    },
    'sass-loader'
  ]
}

Options

namedExport

When the option is switched on classes exported as variables. Be sure you using camelCase option of css-loader to avoid invalid name of variables.

// This file is generated automatically.
export const button: string;
export const buttonActive: string;

When option is off:

// This file is generated automatically.
export interface I_buttonScss {
  'button': string
  'buttonActive': string
}
declare const styles: I_buttonScss;
export = styles;

banner

Adds a "banner" prefix to each generated file.

Usage in Typescript

import * as styles from './_button.scss';

To avoid errors about the absent module, you need to determine this:

/**
 * Trap for `*.scss.d.ts` files which are not generated yet.
 */
declare module '*.scss' {
  var classes: any;
  export = classes;
}

When you add new classname Typescript compiler may not find the generated variable so you need to compile twice your files.

License

Licensed under the MIT license.

HomePage

https://github.com/Megaputer/dts-css-modules-loader


公众号

欢迎 JavaScript 爱好者