1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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
|