vue多页面应用 webpack配置

更改webpack配置需要重启项目

第一种带注释

module.exports = {
	pages: {
		page1: {
			//文件夹创建安装当前路径创建就可以
			//比如entry 从src下面创建pages,pages里面创建page1
			//pege1里面创建main.js
			//入口文件,相对于多页面应用的main.js,必须
			entry: 'src/pages/page1/main.js',
			//生成应用模板,,省略默认与模块名一致
			template: "public/page1.html",
			//编译后dist目录中输出的文件名字,非必须,
			//省略默认与模块名一致
			filename: "page1.html"
		},
		page2: 'src/pages/page2/main.js'
	}
}

// let path = require("path");
// let HtmlWebpackPlugin = require('html-webpack-plugin');
// module.exports = {
// 	mode: 'development',
// 	entry: {
// 		home: './src/index.js', //home入口
// 		other: './src/index.js' //other入口
// 	},
// 	output: {
// 		//动态输出多个文件,对应入口的名字,生成到dist
// 		filename: '[name].js',
// 		path: path.resolve(__dirname, 'dist')
// 	},
// 	plugins: [
// 		new HtmlWebpackPlugin({
// 			template: './src/index.html', //用这个模板
// 			filename: 'home.html', //最后生成的文件名字\
// 			chunks: ['home']
// 		}),
// 		new HtmlWebpackPlugin({ //这个插件就是生成html文件的
// 			template: './src/index.html', //用这个模板
// 			filename: 'other.html',//最后生成的文件名字
// 			//当前html的引入的homejs 和 otherjs
// 			chunks: ['home', 'other']
// 		}),
// 	]
// }

// module.exports = {
// 	pages: {
// 		console: {
// 			// 应用入口配置,相当于单页面应用的main.js,必需项
// 			entry: 'src/modules/console/console.js',

// 			// 应用的模版,相当于单页面应用的public/index.html,可选项,省略时默认与模块名一致
// 			template: 'public/console.html',

// 			// 编译后在dist目录的输出文件名,可选项,省略时默认与模块名一致
// 			filename: 'console.html',

// 			// 标题,可选项,一般情况不使用,通常是在路由切换时设置title
// 			// 需要注意的是使用title属性template 中的 title 标签需要是 <title><%= 		htmlWebpackPlugin.options.title %></title>
// 			title: 'console page',
// 			// 当前打包的html里面引入的包含的模块,可选项
// 			chunks: ['console']
// 		},
// 		// 只有entry属性时,直接用字符串表示模块入口
// 		client: 'src/modules/client/client.js'
// 	}
// }


第二种

const glob = require("glob");

function getEntry(url) {
  let entrys = {};
  glob.sync(url).forEach((item) => {
    let urlArr = item
      .split("/")
      .splice(-2)
      .map((item) => item.split(".")[0]);
    entrys[urlArr[1]] = {
      entry: "src/pages/" + urlArr[1] + "/" + "main.js",
      template: "public/" + urlArr[1] + ".html",
      filename: urlArr[1] + ".html",
      title: urlArr[1],  
    };
  });
  return entrys;
}
let pages = getEntry("./public/*.html");

module.exports = {
  // devServer: {
  //   proxy: {
  //     "/api": {
  //       target: "http://localhost:8088",
  //       changeOrigin: true,
  //       pathRewrite: {
  //         "^/api": "/",
  //       },
  //     },
  //   },
  // },
  css: {
    loaderOptions: {
      sass: {
        prependData: `@import "@/styles/global.scss";`,
      },
    },
  },
  publicPath: "./",
  pages: pages,
};

第三种

找不到当前页面自动去首页

let glob = require('glob')

//配置pages多页面获取当前文件夹下的html和js
function getEntry(globPath) {
    let entries = {},
        tmp, htmls = {};

    // 读取src/pages/**/底下所有的html文件
    glob.sync(globPath + 'html').forEach(function (entry) {
        tmp = entry.split('/').splice(-3);
        htmls[tmp[1]] = entry
    })

    // 读取src/pages/**/底下所有的js文件
    glob.sync(globPath + 'js').forEach(function (entry) {
        tmp = entry.split('/').splice(-3);
        entries[tmp[1]] = {
            entry,
            template: htmls[tmp[1]] ? htmls[tmp[1]] : 'index.html', //  当前目录没有有html则以共用的public/index.html作为模板
            filename: tmp[1] + '.html' //  以文件夹名称.html作为访问地址
        };
    });
    console.log(entries)
    return entries;
}
let htmls = getEntry('./src/pages/**/*.');

module.exports = {
    pages: htmls,
    publicPath: './', //  解决打包之后静态文件路径404的问题
    outputDir: 'output', //  打包后的文件夹名称,默认dist
    devServer: {
        open: true, //  npm run serve 自动打开浏览器
        index: '/index.html', //  默认启动页面
        hot: true
    },
  chainWebpack: config => {
  config.module.rule('md')
   .test(/\.md/)
   .use('vue-loader')
   .loader('vue-loader')
   .end()
   .use('vue-markdown-loader')
   .loader('vue-markdown-loader/lib/markdown-compiler')
   .options({
    raw: true
   })
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值