@@ -3,6 +3,7 @@ const babel = require('gulp-babel');
33const less = require ( 'gulp-less' ) ;
44const autoprefixer = require ( 'gulp-autoprefixer' ) ;
55const cssnano = require ( 'gulp-cssnano' ) ;
6+ const through2 = require ( 'through2' ) ;
67
78const paths = {
89 dest : {
@@ -14,17 +15,45 @@ const paths = {
1415 scripts : [ 'components/**/*.{ts,tsx}' , '!components/**/demo/*.{ts,tsx}' ] ,
1516} ;
1617
18+ /**
19+ * 当前组件样式 import './index.less' => import './index.css'
20+ * 依赖的其他组件样式 import '../test-comp/style' => import '../test-comp/style/css.js'
21+ * 依赖的其他组件样式 import '../test-comp/style/index.js' => import '../test-comp/style/css.js'
22+ * @param {string } content
23+ */
24+ function cssInjection ( content ) {
25+ return content
26+ . replace ( / \/ s t y l e \/ ? ' / g, "/style/css'" )
27+ . replace ( / \/ s t y l e \/ ? " / g, '/style/css"' )
28+ . replace ( / \. l e s s / g, '.css' ) ;
29+ }
30+
1731/**
1832 * 编译脚本文件
19- * @param {* } babelEnv babel环境变量
20- * @param {* } destDir 目标目录
33+ * @param {string } babelEnv babel环境变量
34+ * @param {string } destDir 目标目录
2135 */
2236function compileScripts ( babelEnv , destDir ) {
2337 const { scripts } = paths ;
2438 process . env . BABEL_ENV = babelEnv ;
2539 return gulp
2640 . src ( scripts )
2741 . pipe ( babel ( ) ) // 使用gulp-babel处理
42+ . pipe (
43+ through2 . obj ( function z ( file , encoding , next ) {
44+ this . push ( file . clone ( ) ) ;
45+ // 找到目标
46+ if ( file . path . match ( / ( \/ | \\ ) s t y l e ( \/ | \\ ) i n d e x \. j s / ) ) {
47+ const content = file . contents . toString ( encoding ) ;
48+ file . contents = Buffer . from ( cssInjection ( content ) ) ; // 处理文件内容
49+ file . path = file . path . replace ( / i n d e x \. j s / , 'css.js' ) ; // 文件重命名
50+ this . push ( file ) ; // 新增该文件
51+ next ( ) ;
52+ } else {
53+ next ( ) ;
54+ }
55+ } ) ,
56+ )
2857 . pipe ( gulp . dest ( destDir ) ) ;
2958}
3059
0 commit comments