Skip to content

Commit ebd0338

Browse files
committed
introduce previous behavior as runInNewContext:"once"
1 parent cab1b15 commit ebd0338

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

src/server/bundle-renderer/create-bundle-renderer.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ export function createBundleRendererCreator (createRenderer: () => Renderer) {
3434
) {
3535
let files, entry, maps
3636
let basedir = rendererOptions.basedir
37-
const runInNewContext = rendererOptions.runInNewContext !== false
3837

3938
// load bundle if given filepath
4039
if (
@@ -76,7 +75,12 @@ export function createBundleRendererCreator (createRenderer: () => Renderer) {
7675

7776
const renderer = createRenderer(rendererOptions)
7877

79-
const run = createBundleRunner(entry, files, basedir, runInNewContext)
78+
const run = createBundleRunner(
79+
entry,
80+
files,
81+
basedir,
82+
rendererOptions.runInNewContext
83+
)
8084

8185
return {
8286
renderToString: (context?: Object, cb: (err: ?Error, res: ?string) => void) => {

src/server/bundle-renderer/create-bundle-runner.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const path = require('path')
55
const resolve = require('resolve')
66
const NativeModule = require('module')
77

8-
function createContext (context) {
8+
function createSandbox (context) {
99
const sandbox = {
1010
Buffer,
1111
console,
@@ -40,20 +40,20 @@ function compileModule (files, basedir, runInNewContext) {
4040
return script
4141
}
4242

43-
function evaluateModule (filename, context, evaluatedFiles = {}) {
43+
function evaluateModule (filename, sandbox, evaluatedFiles = {}) {
4444
if (evaluatedFiles[filename]) {
4545
return evaluatedFiles[filename]
4646
}
4747

4848
const script = getCompiledScript(filename)
49-
const compiledWrapper = runInNewContext
50-
? script.runInNewContext(context)
51-
: script.runInThisContext()
49+
const compiledWrapper = runInNewContext === false
50+
? script.runInThisContext()
51+
: script.runInNewContext(sandbox)
5252
const m = { exports: {}}
5353
const r = file => {
5454
file = path.join('.', file)
5555
if (files[file]) {
56-
return evaluateModule(file, context, evaluatedFiles)
56+
return evaluateModule(file, sandbox, evaluatedFiles)
5757
} else if (basedir) {
5858
return require(
5959
resolvedModules[file] ||
@@ -90,13 +90,13 @@ function deepClone (val) {
9090

9191
export function createBundleRunner (entry, files, basedir, runInNewContext) {
9292
const evaluate = compileModule(files, basedir, runInNewContext)
93-
if (runInNewContext) {
93+
if (runInNewContext !== false && runInNewContext !== 'once') {
9494
// new context mode: creates a fresh context and re-evaluate the bundle
9595
// on each render. Ensures entire application state is fresh for each
9696
// render, but incurs extra evaluation cost.
9797
return (userContext = {}) => new Promise(resolve => {
9898
userContext._registeredComponents = new Set()
99-
const res = evaluate(entry, createContext(userContext))
99+
const res = evaluate(entry, createSandbox(userContext))
100100
resolve(typeof res === 'function' ? res(userContext) : res)
101101
})
102102
} else {
@@ -108,13 +108,16 @@ export function createBundleRunner (entry, files, basedir, runInNewContext) {
108108
let initialContext
109109
return (userContext = {}) => new Promise(resolve => {
110110
if (!runner) {
111+
const sandbox = runInNewContext === 'once'
112+
? createSandbox()
113+
: global
111114
// the initial context is only used for collecting possible non-component
112115
// styles injected by vue-style-loader.
113-
initialContext = global.__VUE_SSR_CONTEXT__ = {}
114-
runner = evaluate(entry)
116+
initialContext = sandbox.__VUE_SSR_CONTEXT__ = {}
117+
runner = evaluate(entry, sandbox)
115118
// On subsequent renders, __VUE_SSR_CONTEXT__ will not be avaialbe
116119
// to prevent cross-request pollution.
117-
delete global.__VUE_SSR_CONTEXT__
120+
delete sandbox.__VUE_SSR_CONTEXT__
118121
if (typeof runner !== 'function') {
119122
throw new Error(
120123
'bundle export should be a function when using ' +

src/server/create-renderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export type RenderOptions = {
2727
basedir?: string;
2828
shouldPreload?: Function;
2929
clientManifest?: ClientManifest;
30-
runInNewContext?: boolean;
30+
runInNewContext?: boolean | 'once';
3131
};
3232

3333
export function createRenderer ({

0 commit comments

Comments
 (0)