diff --git a/src/server/create-renderer.js b/src/server/create-renderer.js
index 502b6fa6d1d..2a0ada84ea7 100644
--- a/src/server/create-renderer.js
+++ b/src/server/create-renderer.js
@@ -28,6 +28,7 @@ export type RenderOptions = {
basedir?: string;
shouldPreload?: Function;
shouldPrefetch?: Function;
+ shouldRenderAsyncScripts?: boolean;
clientManifest?: ClientManifest;
serializer?: Function;
runInNewContext?: boolean | 'once';
@@ -42,6 +43,7 @@ export function createRenderer ({
cache,
shouldPreload,
shouldPrefetch,
+ shouldRenderAsyncScripts,
clientManifest,
serializer
}: RenderOptions = {}): Renderer {
@@ -51,6 +53,7 @@ export function createRenderer ({
inject,
shouldPreload,
shouldPrefetch,
+ shouldRenderAsyncScripts,
clientManifest,
serializer
})
diff --git a/src/server/template-renderer/index.js b/src/server/template-renderer/index.js
index c8927b2de2c..74926bf16ad 100644
--- a/src/server/template-renderer/index.js
+++ b/src/server/template-renderer/index.js
@@ -16,6 +16,7 @@ type TemplateRendererOptions = {
clientManifest?: ClientManifest;
shouldPreload?: (file: string, type: string) => boolean;
shouldPrefetch?: (file: string, type: string) => boolean;
+ shouldRenderAsyncScripts?: boolean;
serializer?: Function;
};
@@ -221,9 +222,11 @@ export default class TemplateRenderer {
}
renderScripts (context: Object): string {
+ const shouldRenderAsyncScripts = this.options.shouldRenderAsyncScripts !== false
+
if (this.clientManifest) {
const initial = this.preloadFiles.filter(({ file }) => isJS(file))
- const async = (this.getUsedAsyncFiles(context) || []).filter(({ file }) => isJS(file))
+ const async = ((shouldRenderAsyncScripts && this.getUsedAsyncFiles(context)) || []).filter(({ file }) => isJS(file))
const needed = [initial[0]].concat(async, initial.slice(1))
return needed.map(({ file }) => {
return ``
diff --git a/test/ssr/ssr-template.spec.js b/test/ssr/ssr-template.spec.js
index d30f096668a..70af1d02eee 100644
--- a/test/ssr/ssr-template.spec.js
+++ b/test/ssr/ssr-template.spec.js
@@ -378,7 +378,7 @@ describe('SSR: template option', () => {
// manifest chunk should be first
`` +
// async chunks should be before main chunk
- `` +
+ (options.noAsyncScripts ? ``: ``) +
`` +
`