1
1
var Module = require ( 'module' ) ;
2
2
var frontendCache = { } ;
3
3
var frontendFactoryCache = { } ;
4
+ var frontendLoaded = { } ;
4
5
var debuglog = require ( 'debuglog' ) ( 'yog/isomorphic' ) ;
5
6
6
7
module . exports . isomorphic = [ 'views' , function ( app , conf ) {
7
8
var namespaceConnector = conf . namespaceConnector || ':' ;
8
9
9
10
global . define = function ( id , factory ) {
10
- debuglog ( 'isomorphic script' , id , 'loaded' ) ;
11
11
frontendFactoryCache [ 'frontend_' + id ] = factory ;
12
12
} ;
13
13
14
- function getDeps ( id ) {
14
+ function getDeps ( id , loaded ) {
15
15
let deps = [ ] ;
16
16
var info = app . fis . getInfo ( id ) ;
17
17
if ( ! info ) {
18
18
return deps ;
19
19
}
20
20
if ( info . deps ) {
21
21
info . deps . forEach ( dep => {
22
- deps = deps . concat ( getDeps ( dep ) ) ;
22
+ deps = deps . concat ( getDeps ( dep , loaded ) ) ;
23
23
} ) ;
24
24
}
25
- if ( info . type === 'js' ) {
25
+ if ( info . type === 'js' && ! loaded [ info . subpath ] ) {
26
26
if ( ! info . subpath ) {
27
27
throw new Error ( 'Please update your yog2 cli version to support isomorphic mode.' ) ;
28
28
}
29
+ loaded [ info . subpath ] = true ;
29
30
deps . push ( info . subpath ) ;
30
31
}
31
32
return deps ;
@@ -38,7 +39,7 @@ module.exports.isomorphic = ['views', function (app, conf) {
38
39
return originModuleLoad ( request , parent , isMain ) ;
39
40
}
40
41
if ( ! frontendFactoryCache [ 'frontend_' + request ] ) {
41
- getDeps ( request ) . forEach ( dep => {
42
+ getDeps ( request , frontendLoaded ) . forEach ( dep => {
42
43
debuglog ( 'require isomorphic script from' , dep ) ;
43
44
require ( yog . ROOT_PATH + dep ) ;
44
45
} ) ;
@@ -59,6 +60,7 @@ module.exports.isomorphic = ['views', function (app, conf) {
59
60
60
61
return {
61
62
cleanCache : function ( ) {
63
+ frontendLoaded = { } ;
62
64
frontendCache = { } ;
63
65
frontendFactoryCache = { } ;
64
66
}
0 commit comments