diff --git a/lib/build.js b/lib/build.js index 9bb27c54de..3d76a5d218 100644 --- a/lib/build.js +++ b/lib/build.js @@ -83,6 +83,14 @@ export function options () { if (this.options.build && !Array.isArray(this.options.build.loaders)) extraDefaults.loaders = defaultsLoaders if (this.options.build && !Array.isArray(this.options.build.postcss)) extraDefaults.postcss = defaultsPostcss this.options.build = _.defaultsDeep(this.options.build, defaults, extraDefaults) + if (this.options.build.publicPath.indexOf('http') === 0) { + // activate only in production mode + if (this.dev) { + this.options.build.publicPath = defaults.publicPath + } else { + this.options.nuxtStatic = false + } + } // Production, create server-renderer if (!this.dev) { const serverConfig = getWebpackServerConfig.call(this) diff --git a/lib/generate.js b/lib/generate.js index 9f37dfc469..1bf2eb38b4 100644 --- a/lib/generate.js +++ b/lib/generate.js @@ -22,15 +22,6 @@ const defaults = { export default function () { const s = Date.now() /* - ** Update loaders config to add router.base path - */ - // this.options.build.loaders.forEach((config) => { - // if (['file', 'url', 'file-loader', 'url-loader'].includes(config.loader)) { - // config.query = config.query || {} - // config.query.publicPath = urlJoin(this.options.router.base, '/_nuxt/') - // } - // }) - /* ** Set variables */ this.options.generate = _.defaultsDeep(this.options.generate, defaults) @@ -38,7 +29,7 @@ export default function () { var srcStaticPath = resolve(this.srcDir, 'static') var srcBuiltPath = resolve(this.dir, '.nuxt', 'dist') var distPath = resolve(this.dir, this.options.generate.dir) - var distNuxtPath = resolve(distPath, '_nuxt') + var distNuxtPath = join(distPath, (this.options.build.publicPath.indexOf('http') === 0 ? '_nuxt' : this.options.build.publicPath)) return co(function * () { /* ** Launch build process diff --git a/lib/nuxt.js b/lib/nuxt.js index 6982b29049..0e2bf46779 100644 --- a/lib/nuxt.js +++ b/lib/nuxt.js @@ -76,8 +76,8 @@ class Nuxt { this.renderer = null // For serving static/ files to / this.serveStatic = pify(serveStatic(resolve(this.srcDir, 'static'))) - // For serving .nuxt/dist/ files - this._nuxtRegexp = /^\/_nuxt\// + // For serving .nuxt/dist/ files (only when build.publicPath is not an URL) + this.options.nuxtStatic = true this.serveStaticNuxt = pify(serveStatic(resolve(this.dir, '.nuxt', 'dist'))) // Add this.Server Class this.Server = Server diff --git a/lib/utils.js b/lib/utils.js index aac0823475..65ab11edee 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -28,7 +28,7 @@ export function * waitFor (ms) { } export function urlJoin () { - return [].slice.call(arguments).join('/').replace(/\/+/g, '/') + return [].slice.call(arguments).join('/').replace(/\/+/g, '/').replace(':/', '://') } export function promisifyRouteParams (fn) { diff --git a/lib/webpack/base.config.js b/lib/webpack/base.config.js index 017f7e99ae..7e97ebe31d 100644 --- a/lib/webpack/base.config.js +++ b/lib/webpack/base.config.js @@ -21,7 +21,7 @@ export default function ({ isClient, isServer }) { vendor: ['vue', 'vue-router', 'vue-meta'] }, output: { - publicPath: urlJoin(this.options.router.base, '/_nuxt/') + publicPath: (this.options.build.publicPath.indexOf('http') === 0 ? this.options.build.publicPath : urlJoin(this.options.router.base, this.options.build.publicPath)) }, performance: { hints: (this.dev ? false : 'warning')