Website-Suche

typescript - Wie mache ich, dass „import * as style from X.less“ funktioniert?


Ich bin kürzlich auf diesen Code gestoßen:

import * as style from './style.css';

Ich verstehe die dabei verwendete Magie nicht, aber ich mag es. Es ist cool. Aber es wäre cooler, wenn ich das mit .less-Dateien zum Laufen bringen könnte. Ist das möglich?

Verwendung von Typescript + React + Webpack.

Antwort #1

Du benötigst einen Loader, um Webpack zu ermöglichen, Dateien anderes als .js-Dateien zu importieren. Ein Loader konvertiert eine Datei in JS-Code, sodass Webpack sie importieren kann. Wenn du versuchst, eine .less-Datei zu importieren, benötigst du less-loader (um Less in CSS zu konvertieren), css-loader (um den CSS-Code zu parsen) und style-loader oder mini-css-extract-plugin (um das Bundle den CSS-Code auf der Seite einfügen zu lassen).

Installieren Sie zuerst die Loader mit NPM (im Terminal ausführen):

npm install less-loader css-loader style-loader

Dann sagen Sie Webpack, dass Sie diese Loader für .less-Dateien verwenden möchten: Fügen Sie eine Regel zu Ihrer webpack.config.js hinzu:

module.exports = {
  // ...
  module: {
    rules: [
      // ...
      {
        test: /\.less/,
        use: [
          'style-loader',
          'css-loader',
          'less-loader'
        ]
      }
    ]
  }
};

Sag TypeScript dann, welchen Typ deine .less-Dateien haben. Um dies zu tun, finde oder erstelle eine .d.ts-Datei (z. B. src/global.d.ts) innerhalb deiner Projektdateien und füge dort den folgenden Code hinzu:

declare module '*.less' {
  const classes: {[key: string]: string};
  export default classes;
}

Infolgedessen wird TypeScript wissen, dass die style-Variable aus deinem Beispiel eine Karte von Zeichenketten ist. Aber du musst den Importcode ein wenig ändern:

import style from './style.less';
const cssClass = style.someClass;

// Or just this to inject the CSS code to your bundle
import './style.less';

Sie können weitere Informationen im offiziellen Webpack+Less-Tutorial finden.

Verwandte Artikel