From 20f29c2644dc46d2bbaa8909dee3ca294273730b Mon Sep 17 00:00:00 2001 From: Pedro Nauck <pedronauck@gmail.com> Date: Fri, 8 Jun 2018 20:34:02 -0300 Subject: [PATCH] feat(docz-core): add base config argument --- .../docz-core/src/bundlers/webpack/config.ts | 8 +++++++- packages/docz-core/src/commands/args.ts | 6 +++++- packages/docz-core/src/config/paths.ts | 17 ++--------------- packages/docz/src/theme.tsx | 4 +++- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/packages/docz-core/src/bundlers/webpack/config.ts b/packages/docz-core/src/bundlers/webpack/config.ts index 9a86515c4..97a93925f 100644 --- a/packages/docz-core/src/bundlers/webpack/config.ts +++ b/packages/docz-core/src/bundlers/webpack/config.ts @@ -69,7 +69,7 @@ export const createConfig = (babelrc: BabelRC) => ( output .filename('static/js/[name].[chunkhash:8].js') .sourceMapFilename('static/js/[name].[chunkhash:8].js.map') - .publicPath(paths.servedPath) + .publicPath(paths.servedPath(args.base)) const outputDev = (output: Config.Output) => output @@ -198,6 +198,12 @@ export const createConfig = (babelrc: BabelRC) => ( cfg.plugin('friendly-errors').use(friendlyErrors) }) + config.plugin('injections').use(require('webpack/lib/DefinePlugin'), [ + { + BASE_URL: JSON.stringify(args.base), + }, + ]) + config.performance.hints(false) return config } diff --git a/packages/docz-core/src/commands/args.ts b/packages/docz-core/src/commands/args.ts index d44569142..bba4c0292 100644 --- a/packages/docz-core/src/commands/args.ts +++ b/packages/docz-core/src/commands/args.ts @@ -3,10 +3,10 @@ import { Plugin } from '../Plugin' export interface Argv { /* io args */ + base: string src: string files: string /* bundler args */ - env: string debug: boolean typescript: boolean propsParser: boolean @@ -32,6 +32,10 @@ export interface Config extends Argv { } export const args = (yargs: any) => { + yargs.positional('base', { + type: 'string', + default: '/', + }) yargs.positional('source', { alias: 'src', type: 'string', diff --git a/packages/docz-core/src/config/paths.ts b/packages/docz-core/src/config/paths.ts index 6a0e49808..772191e58 100644 --- a/packages/docz-core/src/config/paths.ts +++ b/packages/docz-core/src/config/paths.ts @@ -1,10 +1,7 @@ import * as fs from 'fs' import * as path from 'path' -import * as url from 'url' import resolve from 'resolve' -const ENV_PUBLIC_URL = process.env.PUBLIC_URL - const ensureSlash = (filepath: any, needsSlash: boolean) => { const hasSlash = filepath.endsWith('/') @@ -17,16 +14,6 @@ const ensureSlash = (filepath: any, needsSlash: boolean) => { } } -const getPublicUrl = (appPackageJson: string) => - ENV_PUBLIC_URL || require(appPackageJson).homepage - -const getServedPath = (appPackageJson: string) => { - const publicUrl = getPublicUrl(appPackageJson) - const servedUrl = - ENV_PUBLIC_URL || (publicUrl ? url.parse(publicUrl).pathname : '/') - return ensureSlash(servedUrl, true) -} - export const root = fs.realpathSync(process.cwd()) const resolveApp = (to: string) => path.resolve(root, to) @@ -34,7 +21,7 @@ export interface Paths { root: string templates: string packageJson: string - servedPath: string + servedPath: (base: string) => string docz: string app: string dist: string @@ -49,7 +36,7 @@ export interface Paths { export const templates = path.join(resolve.sync('docz-core'), '../templates') export const packageJson = resolveApp('package.json') -export const servedPath = getServedPath(resolveApp('package.json')) +export const servedPath = (base: string) => ensureSlash(base, true) export const docz = resolveApp('.docz') export const app = path.resolve(docz, 'app/') diff --git a/packages/docz/src/theme.tsx b/packages/docz/src/theme.tsx index 76f0c8f47..b542e1f5c 100644 --- a/packages/docz/src/theme.tsx +++ b/packages/docz/src/theme.tsx @@ -5,6 +5,8 @@ import merge from 'deepmerge' import { ComponentsMap } from './components/DocPreview' +declare var BASE_URL: string + export type MSXComponent = CT<{ components: ComponentsMap }> @@ -67,7 +69,7 @@ export function theme( return ( <dataContext.Provider value={value}> - <BrowserRouter> + <BrowserRouter basename={BASE_URL}> <Wrapper> <WrappedComponent /> </Wrapper>