add find app method
This commit is contained in:
parent
c99f5a101a
commit
485fcad15c
2
dist/index.js
vendored
2
dist/index.js
vendored
File diff suppressed because one or more lines are too long
81
src/main.ts
81
src/main.ts
@ -18,24 +18,91 @@ const systemJSImport = async (requestUrl: string) => {
|
|||||||
return { component, mount, unmount }
|
return { component, mount, unmount }
|
||||||
}
|
}
|
||||||
|
|
||||||
const getPublicPath = (apps, path) => {
|
class Apps extends Map {
|
||||||
const searchKey = path.substr(1)
|
|
||||||
return `./${searchKey}/${apps[searchKey].version}/index.js`
|
constructor(apps) {
|
||||||
|
super()
|
||||||
|
this.merge(apps)
|
||||||
|
}
|
||||||
|
|
||||||
|
merge(apps) {
|
||||||
|
(Object.entries(
|
||||||
|
apps
|
||||||
|
).forEach(([path, options]) =>
|
||||||
|
this.set(path, options)
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
startWithPath(path, subPath) {
|
||||||
|
if (!subPath) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const pathItem = String(path).split('/');
|
||||||
|
const subPathItems = String(subPath).split('/')
|
||||||
|
|
||||||
|
return subPathItems.reduce(
|
||||||
|
(memo, appItem, index) => memo && pathItem[index] === appItem,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
findApp = (path) => {
|
||||||
|
const currentPath = [...this.keys()].reduce(
|
||||||
|
(memo, appRoute) => {
|
||||||
|
const correctedAppRoute = appRoute.replace(/^\/?/, '/')
|
||||||
|
const correctedMemo = memo ? memo.replace(/^\/?/, '/') : memo
|
||||||
|
return this.startWithPath(path, correctedAppRoute) && this.startWithPath(correctedAppRoute, correctedMemo)
|
||||||
|
? appRoute
|
||||||
|
: memo
|
||||||
|
}, void 0
|
||||||
|
)
|
||||||
|
|
||||||
|
return (
|
||||||
|
this.get(currentPath) || this.get('/') || {
|
||||||
|
version: ''
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async ({ apps, navigations, config }) => {
|
|
||||||
|
|
||||||
|
|
||||||
|
const defaultNavigations = {
|
||||||
|
login: '/login',
|
||||||
|
main: '/main',
|
||||||
|
news: '/news',
|
||||||
|
org: '/org',
|
||||||
|
sections: '/sections',
|
||||||
|
'news.details': '/news/{{id}}',
|
||||||
|
'org.details': '/org/{{name}}',
|
||||||
|
'sections.details': '/sections/{{name}}'
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultApps = {
|
||||||
|
login: { version: '1.0.0' },
|
||||||
|
main: { version: '1.0.1', name: 'main' },
|
||||||
|
news: { version: '1.0.0' },
|
||||||
|
org: { version: '1.0.0' },
|
||||||
|
sections: { version: '1.0.0' }
|
||||||
|
}
|
||||||
|
|
||||||
|
export default async ({ rawapps, navigations, config }) => {
|
||||||
|
const apps = new Apps(rawapps)
|
||||||
const history = createBrowserHistory()
|
const history = createBrowserHistory()
|
||||||
|
|
||||||
let prevPathname = window.location.pathname
|
let prevPathname = window.location.pathname
|
||||||
|
|
||||||
const publicPath = getPublicPath(apps, history.location.pathname)
|
const app = apps.findApp(history.location.pathname)
|
||||||
|
|
||||||
|
const publicPath = `./${app.name}/${app.version}`
|
||||||
|
|
||||||
__webpack_public_path__ = `${publicPath}${__webpack_public_path__}`
|
__webpack_public_path__ = `${publicPath}${__webpack_public_path__}`
|
||||||
|
|
||||||
const app = `${publicPath}/index.js`
|
const appPath = `${config.baseUrl}${publicPath}/index.js`
|
||||||
|
|
||||||
const { component, mount, unmount } = await systemJSImport(app);
|
const { component, mount, unmount } = await systemJSImport(appPath);
|
||||||
|
|
||||||
mount(component.default);
|
mount(component.default);
|
||||||
|
|
||||||
|
@ -16,9 +16,10 @@
|
|||||||
"outDir": "./dist/",
|
"outDir": "./dist/",
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
|
"downlevelIteration" :true,
|
||||||
"noImplicitAny": false,
|
"noImplicitAny": false,
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"target": "es5",
|
"target": "es6",
|
||||||
"jsx": "react",
|
"jsx": "react",
|
||||||
"typeRoots": ["node_modules/@types", "src/typings", "../../node_modules/@types"]
|
"typeRoots": ["node_modules/@types", "src/typings", "../../node_modules/@types"]
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user