From 18f798eb89df94db06705e98983881acf7e00239 Mon Sep 17 00:00:00 2001 From: JingkaiZhao Date: Tue, 25 Dec 2018 15:12:20 +0800 Subject: [PATCH 1/2] feat(cli-service): add history api fallback for multi-page mode --- .../@vue/cli-service/lib/commands/serve.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/@vue/cli-service/lib/commands/serve.js b/packages/@vue/cli-service/lib/commands/serve.js index a871ce348d..b404a9db56 100644 --- a/packages/@vue/cli-service/lib/commands/serve.js +++ b/packages/@vue/cli-service/lib/commands/serve.js @@ -33,7 +33,6 @@ module.exports = (api, options) => { const isProduction = process.env.NODE_ENV === 'production' const url = require('url') - const path = require('path') const chalk = require('chalk') const webpack = require('webpack') const WebpackDevServer = require('webpack-dev-server') @@ -139,9 +138,7 @@ module.exports = (api, options) => { clientLogLevel: 'none', historyApiFallback: { disableDotRule: true, - rewrites: [ - { from: /./, to: path.posix.join(options.publicPath, 'index.html') } - ] + rewrites: genHistoryApiFallbackRewrites(options.publicPath, options.pages) }, contentBase: api.resolve('public'), watchContentBase: !isProduction, @@ -302,6 +299,20 @@ function checkInContainer () { } } +function genHistoryApiFallbackRewrites (baseUrl, pages = {}) { + const path = require('path') + const multiPageRewrites = Object + .keys(pages) + .map(name => ({ + from: new RegExp(`^/${name}`), + to: path.posix.join(baseUrl, pages[name].filename || `${name}.html`) + })) + return [ + ...multiPageRewrites, + { from: /./, to: path.posix.join(baseUrl, 'index.html') } + ] +} + module.exports.defaultModes = { serve: 'development' } From dd0d0db91bb85baead20bcfc1a65d18e18259fb6 Mon Sep 17 00:00:00 2001 From: JingkaiZhao Date: Tue, 19 Feb 2019 15:54:47 +0800 Subject: [PATCH 2/2] fix: sort page names by length in reversed order --- packages/@vue/cli-service/lib/commands/serve.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/@vue/cli-service/lib/commands/serve.js b/packages/@vue/cli-service/lib/commands/serve.js index b404a9db56..d1eec4a0f7 100644 --- a/packages/@vue/cli-service/lib/commands/serve.js +++ b/packages/@vue/cli-service/lib/commands/serve.js @@ -303,6 +303,9 @@ function genHistoryApiFallbackRewrites (baseUrl, pages = {}) { const path = require('path') const multiPageRewrites = Object .keys(pages) + // sort by length in reversed order to avoid overrides + // eg. 'page11' should appear in front of 'page1' + .sort((a, b) => b.length - a.length) .map(name => ({ from: new RegExp(`^/${name}`), to: path.posix.join(baseUrl, pages[name].filename || `${name}.html`)