pages

pages导入各个子域的组件(cpts)来组成页面,应该把组件也作为域的组成部分。严格模式下子域所有依赖需以依赖注入的方式传入,这样保证了每个子域都是独立子应用,方便转成微前端。

  1. import login from 'auth/cpts/login'
  2. export default login
  1. import newTodo from 'todo/cpts/new-todo'
  2. import todoItem from 'todo/cpts/todo-item'
  3. import todoStore from 'todo/adts/store'
  4. export default () => {
  5. const { todos } = todoStore
  6. return `
  7. ${newTodo()}
  8. <ul>${[...todos.values()].map(todoItem).join('')}</ul>
  9. `
  10. }

main

main负责全局的注册,项目的启动,路由等

  1. import { dispatch } from 'lib/utils'
  2. import 'auth/adts/hanlders'
  3. import 'todo/adts/handlers'
  4. import router from './router's
  5. window.dispatch = dispatch
  6. function render() {
  7. document.getElementById('app').innerHTML = router[location.hash]()
  8. }
  9. render()
  10. window.addEventListener('re-render', render)
  1. import login from 'pages/login'
  2. import todoApp from 'pages/index'
  3. import { reRender } from 'lib/utils'
  4. window.addEventListener('hashchange', reRender)
  5. export default {
  6. '#/login': login,
  7. '#/': todoApp,
  8. }

这一层都是常规代码没什么好说的。