@@ -165,6 +165,29 @@ exports.run = function (options) {
165
165
return next ( ) ;
166
166
} ) ;
167
167
168
+ // 在package.json中配置别名
169
+ // 当按照别名访问的时候转到对应的Project的目录
170
+ app . use ( function ( req , res , next ) {
171
+ var url = req . url ;
172
+ var st = Date . now ( ) ;
173
+ var projectList = getCurrentProjects ( ) ;
174
+ // 不论项目,发现别名直接替换为对应的baseName
175
+ if ( projectList && projectList . length ) {
176
+ projectList . forEach ( function ( project ) {
177
+ if ( project . alias && project . alias . length ) {
178
+ project . alias . forEach ( function ( alias ) {
179
+ var aliasReg = new RegExp ( '^/' + alias + '$|^/' + alias + '/' ) ;
180
+ if ( aliasReg . test ( req . url ) ) {
181
+ req . url = req . url . replace ( aliasReg , '/' + project . baseName + '/' ) ;
182
+ // log(`alias rewrite: ${oldUrl} -> ${req.url}` );
183
+ }
184
+ } ) ;
185
+ }
186
+ } ) ;
187
+ }
188
+ next ( ) ;
189
+ } ) ;
190
+
168
191
// custom middlewares
169
192
app . use ( function ( req , res , next ) {
170
193
try {
@@ -657,4 +680,46 @@ exports.run = function (options) {
657
680
projectDir : projectDir
658
681
} ;
659
682
}
683
+
684
+ // 父目录启动的话,可能存在多个项目,是一个项目列表,获取每一个项目列表的信息
685
+ function getCurrentProjects ( ) {
686
+ // 观察当前目录是否有ykit.js
687
+ var cwd = process . cwd ( ) ;
688
+
689
+ if ( _isProject ( cwd ) ) {
690
+ // 项目根目录访问
691
+ return [ _getProjectAlias ( cwd ) ] ;
692
+ } else {
693
+ // 父目录访问
694
+ return fs . readdirSync ( cwd ) . filter ( function ( fileName ) {
695
+ return ( / ^ [ \w - _ ] + $ / . test ( fileName )
696
+ ) ;
697
+ } ) . map ( function ( fileName ) {
698
+ var pd = sysPath . join ( cwd , fileName ) ;
699
+ return _getProjectAlias ( pd ) ;
700
+ } ) . filter ( function ( alias ) {
701
+ return ! ! alias ;
702
+ } ) ;
703
+ }
704
+ }
705
+
706
+ function _getProjectAlias ( projectBase ) {
707
+ if ( _isProject ( projectBase ) ) {
708
+ var jsonstring = fs . readFileSync ( sysPath . join ( projectBase , 'package.json' ) ) . toString ( 'utf8' ) ;
709
+ var packageConfig = JSON . parse ( jsonstring ) ;
710
+
711
+ var alias = [ ] ;
712
+ packageConfig . alias && alias . push ( packageConfig . alias ) ;
713
+ packageConfig . hybridId && alias . push ( packageConfig . hybridId ) ;
714
+
715
+ return {
716
+ baseName : sysPath . basename ( projectBase ) ,
717
+ alias : alias
718
+ } ;
719
+ }
720
+ }
721
+
722
+ function _isProject ( projectPath ) {
723
+ return ! ! globby . sync ( [ 'ykit.*.js' , 'ykit.js' ] , { cwd : projectPath } ) . length ;
724
+ }
660
725
} ;
0 commit comments