83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
const path = require('path')
|
|
const CONFIG = {
|
|
includes: ['path', 'aliasPath', 'name']
|
|
}
|
|
const rootPath = path.resolve(process.cwd(), 'node_modules');
|
|
|
|
/** 解析绝对路径
|
|
* @param {Object} dir
|
|
*/
|
|
function resolvePath(dir) {
|
|
return path.resolve(rootPath, dir);
|
|
}
|
|
|
|
class TransformPages {
|
|
constructor(config) {
|
|
config = {
|
|
...CONFIG,
|
|
...config
|
|
};
|
|
this.CONFIG = config;
|
|
this.webpack = require(resolvePath('webpack'));
|
|
this.uniPagesJSON = require(resolvePath('@dcloudio/uni-cli-shared/lib/pages.js'));
|
|
this.routes = this.getPagesRoutes().concat(this.getNotMpRoutes());
|
|
}
|
|
/**
|
|
* 获取所有pages.json下的内容 返回json
|
|
*/
|
|
get pagesJson() {
|
|
return this.uniPagesJSON.getPagesJson();
|
|
}
|
|
/**
|
|
* 通过读取pages.json文件 生成直接可用的routes
|
|
*/
|
|
getPagesRoutes(pages = this.pagesJson.pages, rootPath = null) {
|
|
const routes = [];
|
|
for (let i = 0; i < pages.length; i++) {
|
|
const item = pages[i];
|
|
const route = {};
|
|
for (let j = 0; j < this.CONFIG.includes.length; j++) {
|
|
const key = this.CONFIG.includes[j];
|
|
let value = item[key];
|
|
if (key === 'path') {
|
|
value = rootPath ? `/${rootPath}/${value}` : `/${value}`
|
|
}
|
|
if (key === 'aliasPath' && i == 0 && rootPath == null) {
|
|
route[key] = route[key] || '/'
|
|
} else if (value !== undefined) {
|
|
route[key] = value;
|
|
}
|
|
}
|
|
routes.push(route);
|
|
}
|
|
return routes;
|
|
}
|
|
/**
|
|
* 解析小程序分包路径
|
|
*/
|
|
getNotMpRoutes() {
|
|
const {
|
|
subPackages
|
|
} = this.pagesJson;
|
|
let routes = [];
|
|
if (subPackages == null || subPackages.length == 0) {
|
|
return [];
|
|
}
|
|
for (let i = 0; i < subPackages.length; i++) {
|
|
const subPages = subPackages[i].pages;
|
|
const root = subPackages[i].root;
|
|
const subRoutes = this.getPagesRoutes(subPages, root);
|
|
routes = routes.concat(subRoutes)
|
|
}
|
|
return routes
|
|
}
|
|
/**
|
|
* 单条page对象解析
|
|
* @param {Object} pageCallback
|
|
* @param {Object} subPageCallback
|
|
*/
|
|
parsePages(pageCallback, subPageCallback) {
|
|
this.uniPagesJSON.parsePages(this.pagesJson, pageCallback, subPageCallback)
|
|
}
|
|
}
|
|
module.exports = TransformPages |