如何使用Webpack在Typescript中导入CSS模块?
.d.ts
文件?并使用经典的Typescript import
声明?使用./styles.css.d.ts
:
import * as styles from './styles.css'
require
Webpack函数导入?
let styles = require("./styles.css");
但对于最后一种方法,我必须定义require
函数。
什么是最佳方法或最佳选择,还可以处理CSS文件定义和类的IntelliSense?
A)正如您所说,有一个最简单(不是最好)的选项可以使用require:
const css = require('./component.css')
require
打字,因为它不是打字稿中的标准功能。declare function require(name: string): string;
B)使用标准导入有更好的解决方案:
import * as css from './component.css'
tsc
编译器将失败为了正确的IntelliSense,Webpack需要为每个css文件生成类型定义:
webpackConfig.module.loaders: [
{ test: /\.css$/, loader: 'typings-for-css-modules?modules' }
{ test: /\.scss$/, loader: 'typings-for-css-modules?modules&sass' }
];
*.css.d.ts
文件提到typings-for-css-loader
包含a bug,并且由于类型文件生成延迟,如果我们的*.css
文件尚未生成,最好声明全局*.css.d.ts
类型。
那little bug场景:
component.css
import * as css from './component.css'
中webpack
component.css.d.ts
),但是打字稿编译器找到新的打字文件已经很晚了webpack
将修复构建错误。简单的解决方法是创建全局定义(例如,源根目录中名为typings.d.ts
的文件),用于导入CSS模块:
declare module '*.css' {
interface IClassNames {
[className: string]: string
}
const classNames: IClassNames;
export = classNames;
}
如果没有生成css文件(例如,您添加了新的css文件),将使用此定义。否则将使用生成的特定(需要在同一文件夹中并命名为与源文件+ .d.ts
扩展名相同),例如。 component.css.d.ts
定义和IntelliSense将完美运行。
component.css.d.ts
的例子:
export const wrapper: string;
export const button: string;
export const link: string;
如果您不想看到生成的css类型,您可以在IDE中设置过滤器以隐藏源中扩展名为.css.d.ts的所有文件。
我已将一个名为Global.d.ts
或typings.d.ts
的文件添加到我的./src
文件夹中,其中包含一些类型定义:
declare module "*.module.css";
Webpack css配置:
{
test: /\.css$/,
use: [
isProductionBuild ? MiniCssExtractPlugin.loader : "style-loader",
{
loader: "css-loader",
options: {
modules: true,
importLoaders: 1,
localIdentName: "[name]_[local]_[hash:base64]",
sourceMap: true,
minimize: true
}
}
]
},
然后我只需导入模块:import styles from "./App.module.css";
或使用require webpack函数导入
这就是我过去常做的事情,并且在我的一些项目中仍然有代码。
现在:我写了typestyle:http://typestyle.github.io/#/,但你不必使用它。如果它让你开心,只要坚持使用const styles = require('./styles.css')
。如果你想要http://typestyle.github.io/#/raw,你还可以使用带有typestyle的原始css
qazxsw poi是最好的方法,因为它是es5版本的javascript,它与react.qazxsw poi的每个功能都兼容,是es6版本的javascript。