File tree Expand file tree Collapse file tree 12 files changed +113
-0
lines changed
fixtures/css-modules-typescript-loader Expand file tree Collapse file tree 12 files changed +113
-0
lines changed Original file line number Diff line number Diff line change 12
12
.umi-test
13
13
** /fixtures /** /dist
14
14
.now
15
+ ** /* .less.d.ts
16
+ ** /* .css.d.ts
Original file line number Diff line number Diff line change @@ -162,6 +162,21 @@ export default {
162
162
163
163
设置 [ css-loader 配置项] ( https://github.com/webpack-contrib/css-loader#options ) 。
164
164
165
+ ## cssModulesTypescriptLoader
166
+
167
+ * type: ` { mode: 'verify' | 'emit' } `
168
+ * Default: ` undefined `
169
+
170
+ Emits TypeScript declaration files matching your CSS Modules in the same location as your source files, e.g. src/Component.css will generate src/Component.css.d.ts.
171
+
172
+ ``` js
173
+ export default {
174
+ cssModulesTypescriptLoader: {},
175
+ }
176
+ }
177
+ }
178
+ ```
179
+
165
180
## cssnano
166
181
167
182
* Type: ` { mergeRules: false, minifyFontValues: { removeQuotes: false } } `
Original file line number Diff line number Diff line change @@ -160,6 +160,32 @@ export default {
160
160
161
161
设置 [ css-loader 配置项] ( https://github.com/webpack-contrib/css-loader#options ) 。
162
162
163
+
164
+ ## cssModulesTypescriptLoader
165
+
166
+ * type: ` { mode: 'verify' | 'emit' } `
167
+ * Default: ` undefined `
168
+
169
+ 对按照css modules方式引入的css/less等样式文件,自动生成对应的ts类型定义文件。
170
+
171
+ 比如:
172
+
173
+ ``` js
174
+ export default {
175
+ cssModulesTypescriptLoader: {},
176
+ }
177
+ ```
178
+
179
+ 等同于,
180
+
181
+ ``` js
182
+ export default {
183
+ cssModulesTypescriptLoader: {
184
+ mode: ' emit' ,
185
+ },
186
+ }
187
+ ```
188
+
163
189
## cssnano
164
190
165
191
* Type: ` { mergeRules: false, minifyFontValues: { removeQuotes: false } } `
Original file line number Diff line number Diff line change 35
35
"babel-loader" : " 8.1.0" ,
36
36
"copy-webpack-plugin" : " 5.1.1" ,
37
37
"css-loader" : " 3.4.2" ,
38
+ "css-modules-typescript-loader" : " 4.0.0" ,
38
39
"file-loader" : " 6.0.0" ,
39
40
"friendly-errors-webpack-plugin" : " 1.7.0" ,
40
41
"less" : " 3.11.1" ,
Original file line number Diff line number Diff line change
1
+ export default {
2
+ cssModulesTypescriptLoader : { }
3
+ }
Original file line number Diff line number Diff line change
1
+ import { IExpectOpts } from '../types' ;
2
+ import * as ts from 'typescript' ;
3
+ import { resolve } from 'path' ;
4
+ import { createDebug } from '@umijs/utils' ;
5
+
6
+ const debug = createDebug ( 'umi:dtstest' ) ;
7
+
8
+ const typeCheckFile = ( files : string [ ] ) : boolean => {
9
+ let program = ts . createProgram ( files , { } ) ;
10
+
11
+ let diagnostic : readonly ts . Diagnostic [ ] = [ ] ;
12
+ for ( const sourceFile of program . getSourceFiles ( ) ) {
13
+ if ( ! sourceFile . isDeclarationFile ) {
14
+ diagnostic = [ ...diagnostic , ...program . getSemanticDiagnostics ( sourceFile ) ] ;
15
+ }
16
+ }
17
+
18
+ debug ( 'diagnostic: ' , diagnostic ) ;
19
+ return diagnostic . length === 0 ;
20
+ }
21
+
22
+ export default ( { indexCSS, files, cwd } : IExpectOpts ) => {
23
+ expect ( indexCSS ) . toContain ( `.a___` ) ;
24
+ expect ( indexCSS ) . toContain ( `.test___` ) ;
25
+ expect ( typeCheckFile ( [ resolve ( cwd , 'index.ts' ) ] ) ) . toBe ( true ) ;
26
+ }
Original file line number Diff line number Diff line change
1
+ import styles from './style.less'
2
+ import styles2 from './style2.css'
3
+
4
+ const classname = styles . a
5
+
6
+ const classname2 = styles2 . test
Original file line number Diff line number Diff line change
1
+ .a {
2
+ color : white ;
3
+ }
Original file line number Diff line number Diff line change
1
+ .test {
2
+ display : inline;
3
+ }
Original file line number Diff line number Diff line change @@ -63,6 +63,13 @@ export function createCSSRule({
63
63
} ) ;
64
64
}
65
65
66
+ if ( isDev && isCSSModules && config . cssModulesTypescriptLoader ) {
67
+ rule
68
+ . use ( 'css-modules-typescript-loader' )
69
+ . loader ( require . resolve ( 'css-modules-typescript-loader' ) )
70
+ . options ( config . cssModulesTypescriptLoader ) ;
71
+ }
72
+
66
73
rule
67
74
. use ( 'css-loader' )
68
75
. loader ( require . resolve ( 'css-loader' ) )
You can’t perform that action at this time.
0 commit comments