UNPKG

auto-vue-route-sfc

Version:

Create page directories and .vue files (vue single file component / SFC) based your export router.

42 lines (37 loc) 1.69 kB
const path = require('path') const VueRouter = require('vue-router') const { isPackageName, replaceAlias } = require('./utils') const _import = (dirname, src) => { try { const s = isPackageName(src) ? src : path.resolve(dirname, replaceAlias(src)) const module = require(s) return module.default || module } catch(e) { // 只针对找不到.vue文件的情形进行处理。若不是,则将报错传递出来 // 正常情况的其它模块的require都已经被正确加载。无法加载的其它模块,将被正常报错处理,无法进行文件创建 // TODO: 因此下面这一返回只会针对 找不到的.vue文件,而.vue文件用cjs方式加载会带.default,所以在下面这一步多封装一层 {default: ...} 是可以的 // TODO: 干脆直接返回Component,让new Router不报错,能够直接按脚手架的代码来运行 if (e.code === 'MODULE_NOT_FOUND' && path.extname(src) === '.vue') { return path.resolve(dirname, replaceAlias(src)) } else { if (!e.message.includes("Unexpected token '<'")){ // 不是由于加载.vue文件出错 throw e // TODO: 这样问题只能定位到route-tmp,没法回到原目录上去定位问题 } } } } const vueRouterFake = VueRouter.createRouter ? new Proxy({}, { get(target, propertyKey) { if (propertyKey === 'createRouter') { return (opt) => opt.routes || [] } else { return () => null } } }) : function R(opt) { return opt.routes || [] } module.exports = { _import, vueRouterFake }