Rush Stack商店博客活动
跳至主要内容

Sass 插件

插件包@rushstack/heft-sass-plugin
插件名称sass-pluginSassPlugin.ts 实现
插件配置文件sass.json
heft.json 选项(无)

此插件为 CSS 样式生成 TypeScript 类型定义。它支持三种不同的样式表格式

何时使用它

我们建议将 Sass 用于任何使用 CSS 样式的 TypeScript Web 应用程序。.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 生成的。您可以重复使用此库来实现自定义 Heft 插件,这些插件可以为除 CSS 之外的其他资源生成类型定义。

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 项目文件夹。

配置

如果 Sass 尚未由 Rig 提供,您的 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 文件扩展名。

另请参阅