Rush Stack商店部落格活動
跳至主要內容

Sass 外掛

外掛套件@rushstack/heft-sass-plugin
外掛名稱sass-pluginSassPlugin.ts 執行
外掛設定檔sass.json
heft設定檔選項(無)

此外掛為 CSS 樣式產生 TypeScript 型別。它支援三種不同的樣式表格式

何時使用

對於任何使用 CSS 風格的 TypeScript 網路應用程式,我們建議使用 Sass。由於 .scss 檔案格式的語法是純粹 CSS 的適當超集,因此此格式是建議的選項。

運作方式

假設你的 CSS 風格定義於下列檔案中

src/my-styles.scss

$marginValue: 20px;

.label {
margin-bottom: $marginValue;
}

在 Heft 呼叫 TypeScript 編譯器之前,sass-plugin 可產生包含型別宣告的暫時檔案

temp/sass-ts/styles.scss.d.ts

// This file was generated by a tool. Modifying it will produce unexpected behavior
export interface IExportStyles {
label: string;
}
declare const strings: IExportStyles;
export default strings;

這會啟用,使 styles.label 樣式能夠像這樣匯入

src/ExampleApp.tsx

import * as React from 'react';
import styles from './my-styles.scss';

export class ExampleApp extends React.Component {
public render(): React.ReactNode {
return <p className={styles.label}>Example text</p>;
}
}

create-react-app 等工具鏈所使用的典型手法,會產生未型別化的 styles 物件。這可能會導致錯誤。Heft 產生的 .d.ts 檔案可提供樣式名稱完整的 IntelliSense,並使編譯器能夠偵測到常見的錯誤,例如錯誤拼寫的識別項。

.d.ts 檔案使用 @rushstack/typings-generator 產生。您可以重複使用這個函式庫,實作除了 CSS 以外,針對其他資源產生鍵入的客製化 Heft 外掛程式。

sass-plugin 會自動產生任何位於 src 資料夾且具有支援的副檔名 (.css.scss.sass) 檔案的鍵入。可以使用 sass.json 設定檔自訂其行為,但在大多數情況下,預設行為就已足夠。

build-tests/heft-sass-test 專案提供了 .css.scss.sass 匯入的範例。

package.json 相依性

如果您使用的是 @rushstack/heft-web-rig,那麼 Sass 會被自動載入並設定好。

否則,您需要將外掛程式套件新增到專案

# If you are using Rush, run this shell command in your project folder:
rush add --package @rushstack/heft-sass-plugin --dev

由於外掛程式只會產生 TypeScript 鍵入,您的專案需要額外的組態才能呼叫 Sass 處理器來轉譯樣式。具體情況取決於您的綑綁組態。如要取得使用 Webpack 的完整範例,請參閱 heft-web-rig 專案資料夾。

組態

如果 rig 尚未提供 Sass,您的 heft.json 組態檔案 應像此範例一樣呼叫它

<專案資料夾>/config/heft.json

{
"$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json",

. . .
"phasesByName": {
"build": {
"cleanFiles": [
{ "sourcePath": "dist" },
{ "sourcePath": "lib" },
{ "sourcePath": "lib-amd" },
{ "sourcePath": "lib-commonjs" },
{ "sourcePath": "lib-es6" }
],
"tasksByName": {
"sass": {
"taskPlugin": {
"pluginPackage": "@rushstack/heft-sass-plugin"
}
},
"typescript": {
"taskDependencies": ["sass"],
"taskPlugin": {
"pluginPackage": "@rushstack/heft-typescript-plugin"
}
},
"webpack": {
"taskDependencies": ["typescript"],
"taskPlugin": {
"pluginPackage": "@rushstack/heft-webpack5-plugin"
}
}
}
}
. . .
}
}

透過將 temp/sass-ts 新增到編譯器組態中的 rootDirs 設定來參照產生的鍵入

tsconfig.json

{
"$schema": "http://json.schemastore.org/tsconfig",

"compilerOptions": {
"rootDirs": ["src/", "temp/sass-ts/"],
. . .

請確定您 typescript.json 檔案中的 staticAssetsToCopy 設定組態為複製 .css.scss.sass 檔案副檔名。

另請參閱