美文网首页
vue-cli3多页面配置

vue-cli3多页面配置

作者: 景阳冈大虫在此 | 来源:发表于2019-08-22 11:01 被阅读0次

    使用vue-cli3的多页面项目,项目结构如下


    即所有的项目都放置在src/modules里
    简单的配置成下面这样

    vue.config.js

    const entryConfig = require('./build/entry-config'); // 生成入口文件对象
    const prodConfig = require('./build/webpack.prod.conf'); // 生产配置
    const devConfig = require('./build/webpack.dev.config');// 开发模式配置
    const productionMode = process.env.NODE_ENV === 'production';
    
    module.exports = {
        pages: entryConfig.getEntries(),
        assetsDir: 'static',
        productionSourceMap: false,
        configureWebpack: config => {
            if (productionMode) {
                config.mode = 'production';
                return prodConfig;
            } else {
                return devConfig;
            }
        }
    };
    
    

    entry-config.js

    const fs = require('fs');
    var moduleRootPath = 'src/modules'; //模块根目录(这个可以根据自己的需求命名)
    let moduleInfo = null;
    
    exports.getEntries = function getEntries() {
        //初始化模块列表
        this.getModuleInfo();
        console.log(
            '*********************************** entries ***********************************'
        );
        console.log(JSON.stringify(moduleInfo));
        return moduleInfo;
    };
    exports.getModuleInfo = function getModuleInfo() {
        //判断是否为空,不为空则直接返回
        if (moduleInfo) {
            return moduleInfo;
        } else {
            //为空则读取列表
            moduleInfo = {};
            readDirSync(moduleRootPath, '', true);
            return moduleInfo;
        }
    };
    /**
     * 深度遍历目录,并整理多页面模块
     * @param path 需要变量的路径
     * @param moduleName 模块名称
     */
    function readDirSync(path, moduleName, nextLevel) {
        //缓存模块对象
        var moduleObj = {
            entry: '',
            template: '',
            filename: ''
        };
        //获取当前模块ID
        var moduleID = path.replace(moduleRootPath + '/', '');
        if (path == moduleRootPath) {
            moduleID = '';
        }
        //获取目录下所有文件及文件夹
        var pa = fs.readdirSync(path);
        pa.forEach(function(ele, index) {
            var info = fs.statSync(path + '/' + ele);
            if (info.isDirectory()) {
                // console.log("dir: "+ele)
                nextLevel && readDirSync(path + '/' + ele, ele, false);
            } else {
                //判断当前模块的html是否存在
                if ('index.html' == ele) {
                    moduleObj.template = path + '/' + ele;
                    moduleObj.filename = moduleID + '/' + 'index.html';
                }
                //判断当前模块的js是否存在
                if ('index.js' == ele) {
                    moduleObj.entry = path + '/' + ele;
                }
                // console.log("file: "+ele)
            }
        });
        //判断模块是否真实(可能只是个分级目录)
        if (
            (moduleObj.moduleID != '' && moduleObj.moduleHTML != '') ||
            (moduleObj.moduleID != '' && moduleObj.moduleJS != '')
        ) {
            if (moduleID) {
                moduleInfo[moduleID] = moduleObj;
            }
        }
    }
    // exports.getEntries();
    
    

    开发模式下有个坑,项目放置在static里不被webpack管理的静态资源,在开发模式一直没引用到资源。
    解决方法:把整个static文件夹拖进public文件夹里。

    相关文章

      网友评论

          本文标题:vue-cli3多页面配置

          本文链接:https://www.haomeiwen.com/subject/hnogsctx.html