From 5043a3855fb139c45719d3eb46fffe42862fddc4 Mon Sep 17 00:00:00 2001 From: stevezyyang Date: Mon, 28 Jan 2019 20:47:57 +0800 Subject: [PATCH 1/4] fix: close #1238, fix 404 when base config is not '/' --- packages/@vuepress/core/lib/dev.js | 10 ++++++++-- .../@vuepress/core/lib/webpack/createBaseConfig.js | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/@vuepress/core/lib/dev.js b/packages/@vuepress/core/lib/dev.js index f8124f6968..b0be587053 100644 --- a/packages/@vuepress/core/lib/dev.js +++ b/packages/@vuepress/core/lib/dev.js @@ -18,7 +18,7 @@ async function prepareServer (sourceDir, cliOptions = {}, context) { const chokidar = require('chokidar') const prepare = require('./prepare/index') - const { chalk, logger } = require('@vuepress/shared-utils') + const { chalk, fs, logger } = require('@vuepress/shared-utils') const HeadPlugin = require('./webpack/HeadPlugin') const DevLogPlugin = require('./webpack/DevLogPlugin') const createClientConfig = require('./webpack/createClientConfig') @@ -110,6 +110,8 @@ async function prepareServer (sourceDir, cliOptions = {}, context) { config = applyUserWebpackConfig(userConfig, config, false /* isServer */) } + const contentBase = path.resolve(sourceDir, '.vuepress/public') + const serverConfig = Object.assign({ disableHostCheck: true, compress: true, @@ -130,8 +132,12 @@ async function prepareServer (sourceDir, cliOptions = {}, context) { }, overlay: false, host, - contentBase: path.resolve(sourceDir, '.vuepress/public'), + contentBase, before (app, server) { + if (fs.existsSync(contentBase)) { + app.use(ctx.base, require('express').static(contentBase)) + } + ctx.pluginAPI.options.beforeDevServer.syncApply(app, server) }, after (app, server) { diff --git a/packages/@vuepress/core/lib/webpack/createBaseConfig.js b/packages/@vuepress/core/lib/webpack/createBaseConfig.js index 71a158073a..c6b5a90cc1 100644 --- a/packages/@vuepress/core/lib/webpack/createBaseConfig.js +++ b/packages/@vuepress/core/lib/webpack/createBaseConfig.js @@ -39,7 +39,7 @@ module.exports = function createBaseConfig ({ .output .path(outDir) .filename(isProd ? 'assets/js/[name].[chunkhash:8].js' : 'assets/js/[name].js') - .publicPath(isProd ? publicPath : '/') + .publicPath(publicPath) if (env.isDebug) { config.devtool('source-map') From 65b55f79bda0d556adc156c24ef1a52494352324 Mon Sep 17 00:00:00 2001 From: stevezyyang Date: Mon, 28 Jan 2019 20:59:24 +0800 Subject: [PATCH 2/4] docs: fix typo shoould -> should --- .../core/__tests__/plugin-api/PluginUtil.spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/@vuepress/core/__tests__/plugin-api/PluginUtil.spec.js b/packages/@vuepress/core/__tests__/plugin-api/PluginUtil.spec.js index 2bc618c2d3..211c2fbf6c 100644 --- a/packages/@vuepress/core/__tests__/plugin-api/PluginUtil.spec.js +++ b/packages/@vuepress/core/__tests__/plugin-api/PluginUtil.spec.js @@ -1,7 +1,7 @@ import { flattenPlugin } from '../../lib/plugin-api/util' describe('flattenPlugin', () => { - test('shoould hydrate plugin correctly', () => { + test('should hydrate plugin correctly', () => { const plugin = { name: 'a', shortcut: 'a', module: { enhanceAppFiles: 'file' }} const hydratedPlugin = flattenPlugin(plugin, {}, {}) expect(hydratedPlugin.name).toBe('a') @@ -10,7 +10,7 @@ describe('flattenPlugin', () => { expect(hydratedPlugin.enhanceAppFiles).toBe('file') }) - test('shoould set \'enabled\' to false when \'pluginOptions\' is set to false.', () => { + test('should set \'enabled\' to false when \'pluginOptions\' is set to false.', () => { const plugin = { name: 'a', shortcut: 'a', module: {}} const hydratedPlugin = flattenPlugin(plugin, false, {}) expect(hydratedPlugin.name).toBe('a') @@ -18,7 +18,7 @@ describe('flattenPlugin', () => { expect(hydratedPlugin.enabled).toBe(false) }) - test('shoould flatten functional plugin correctly.', () => { + test('should flatten functional plugin correctly.', () => { const config = jest.fn(() => ({ enhanceAppFiles: 'file' })) const plugin = { name: 'a', shortcut: 'a', module: config } const pluginOptions = {} @@ -33,7 +33,7 @@ describe('flattenPlugin', () => { expect(Object.getPrototypeOf(config.mock.calls[0][1])).toBe(pluginContext) }) - test('shoould flatten functional plugin correctly - options defaults to \'{}\'.', () => { + test('should flatten functional plugin correctly - options defaults to \'{}\'.', () => { const config = jest.fn(() => ({ enhanceAppFiles: 'file' })) const plugin = { name: 'a', shortcut: 'a', module: config } const pluginOptions = undefined From 3ae119940c3818c554e9b0eb81f62ee294a6f8b2 Mon Sep 17 00:00:00 2001 From: stevezyyang Date: Mon, 28 Jan 2019 21:28:51 +0800 Subject: [PATCH 3/4] fix: fix page 404 when you refresh browser --- packages/@vuepress/core/lib/dev.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/@vuepress/core/lib/dev.js b/packages/@vuepress/core/lib/dev.js index b0be587053..74ae30a3ec 100644 --- a/packages/@vuepress/core/lib/dev.js +++ b/packages/@vuepress/core/lib/dev.js @@ -126,6 +126,7 @@ async function prepareServer (sourceDir, cliOptions = {}, context) { ignored: /node_modules/ }, historyApiFallback: { + index: ctx.base, rewrites: [ { from: /\.html$/, to: '/' } ] From 6d4d98883d67fef2778641d3d22223d0238b5279 Mon Sep 17 00:00:00 2001 From: stevezyyang Date: Tue, 29 Jan 2019 11:37:42 +0800 Subject: [PATCH 4/4] fix: fix *.html 404, https://github.com/vuejs/vue-cli/blob/9c1e797ac6c25b5827403693e018eb199300d067/packages/%40vue/cli-service/lib/commands/serve.js\#L140-L145 --- packages/@vuepress/core/lib/dev.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@vuepress/core/lib/dev.js b/packages/@vuepress/core/lib/dev.js index 74ae30a3ec..8cca233f42 100644 --- a/packages/@vuepress/core/lib/dev.js +++ b/packages/@vuepress/core/lib/dev.js @@ -126,9 +126,9 @@ async function prepareServer (sourceDir, cliOptions = {}, context) { ignored: /node_modules/ }, historyApiFallback: { - index: ctx.base, + disableDotRule: true, rewrites: [ - { from: /\.html$/, to: '/' } + { from: /./, to: path.posix.join(ctx.base, 'index.html') } ] }, overlay: false,