使用Node.js写一个代码生成器的方法步骤(4)

import layoutHeaderAside from '@/layout/header-aside' export default { "layoutHeaderAside": layoutHeaderAside, "menu": () => import(/* webpackChunkName: "menu" */'@/pages/sys/menu'), "route": () => import(/* webpackChunkName: "route" */'@/pages/sys/route'), "role": () => import(/* webpackChunkName: "role" */'@/pages/sys/role'), "user": () => import(/* webpackChunkName: "user" */'@/pages/sys/user'), "interface": () => import(/* webpackChunkName: "interface" */'@/pages/sys/interface') }

如果添加一个 book 就需要在这里加上 "book": () => import(/* webpackChunkName: "book" */'@/pages/sys/book')

这一行内容也是可以通过配置模板来生成的,比如模板内容为:

"<$ model.name $>": () => import(/* webpackChunkName: "<$ model.name $>" */'@/pages<$ model.module $><$ model.name $>')

但是生成的内容怎么加到 index.js 中呢?

第一种方法:复制粘贴

第二种方法:

这部分的模板为 routerMapComponent.njk

export default { "<$ model.name $>": () => import(/* webpackChunkName: "<$ model.name $>" */'@/pages<$ model.module $><$ model.name $>') }

编译后文件保存到 routerMapComponents 目录下,比如 book.js

修改 index.js :

const files = require.context('./', true, /\.js$/); import layoutHeaderAside from '@/layout/header-aside' let componentMaps = { "layoutHeaderAside": layoutHeaderAside, "menu": () => import(/* webpackChunkName: "menu" */'@/pages/sys/menu'), "route": () => import(/* webpackChunkName: "route" */'@/pages/sys/route'), "role": () => import(/* webpackChunkName: "role" */'@/pages/sys/role'), "user": () => import(/* webpackChunkName: "user" */'@/pages/sys/user'), "interface": () => import(/* webpackChunkName: "interface" */'@/pages/sys/interface'), } files.keys().forEach((key) => { if (key === './index.js') return Object.assign(componentMaps, files(key).default) }) export default componentMaps

使用了 require.context

我目前也是使用了这种方法

第三种方法:

开发模板的时候,做特殊处理,读取原有 index.js 的内容,按行进行分割,在数组的最后一个元素之前插入新生成的内容,注意逗号的处理,将新数组内容重新写入 index.js 中,注意换行。

打个广告

如果你想要快速的创建一个 mock-server,同时还支持数据的持久化,又不需要安装数据库,还支持代码生成器的模板开发,欢迎试试lazy-mock

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/c3d899a8158ed11710615a849e6fac5b.html