Skip to content

Commit 133cc73

Browse files
committed
Merge branch 'dev' of https://github.com/vuejs/vue into dev
* 'dev' of https://github.com/vuejs/vue: remove env vars from npm scripts also catch error in data() (close vuejs#5198) always use uid when calling performance.mark (fix vuejs#5209)
2 parents b63e816 + dd35cbf commit 133cc73

File tree

8 files changed

+64
-22
lines changed

8 files changed

+64
-22
lines changed

benchmarks/ssr/renderToStream.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
'use strict'
44

5+
process.env.NODE_ENV = 'production'
6+
57
const Vue = require('../../dist/vue.runtime.common.js')
68
const createRenderer = require('../../packages/vue-server-renderer').createRenderer
79
const renderToStream = createRenderer().renderToStream

benchmarks/ssr/renderToString.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict'
22

3+
process.env.NODE_ENV = 'production'
4+
35
const Vue = require('../../dist/vue.runtime.common.js')
46
const createRenderer = require('../../packages/vue-server-renderer').createRenderer
57
const renderToString = createRenderer().renderToString

build/karma.base.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ var webpackConfig = {
1919
__WEEX__: false,
2020
'process.env': {
2121
NODE_ENV: '"development"',
22-
TRANSITION_DURATION: process.env.SAUCE ? 500 : 50,
23-
TRANSITION_BUFFER: process.env.SAUCE ? 50 : 10
22+
TRANSITION_DURATION: 50,
23+
TRANSITION_BUFFER: 10
2424
}
2525
})
2626
],

build/karma.sauce.config.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
1+
var webpack = require('webpack')
12
var base = require('./karma.base.config.js')
23

4+
base.webpack.plugins = [
5+
new webpack.DefinePlugin({
6+
__WEEX__: false,
7+
'process.env': {
8+
NODE_ENV: '"development"',
9+
// sauce lab vms are slow!
10+
TRANSITION_DURATION: 500,
11+
TRANSITION_BUFFER: 50
12+
}
13+
})
14+
]
15+
316
/**
417
* Having too many tests running concurrently on saucelabs
518
* causes timeouts and errors, so we have to run them in

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
"types/*.d.ts"
1313
],
1414
"scripts": {
15-
"dev": "TARGET=web-full-dev rollup -w -c build/config.js",
16-
"dev:cjs": "TARGET=web-runtime-cjs rollup -w -c build/config.js",
15+
"dev": "rollup -w -c build/config.js --environment TARGET:web-full-dev",
16+
"dev:cjs": "rollup -w -c build/config.js --environment TARGET:web-runtime-cjs",
1717
"dev:test": "karma start build/karma.dev.config.js",
18-
"dev:ssr": "TARGET=web-server-renderer rollup -w -c build/config.js",
19-
"dev:compiler": "TARGET=web-compiler rollup -w -c build/config.js",
20-
"dev:weex": "TARGET=weex-framework rollup -w -c build/config.js",
21-
"dev:weex:compiler": "TARGET=weex-compiler rollup -w -c build/config.js",
18+
"dev:ssr": "rollup -w -c build/config.js --environment TARGET:web-server-renderer",
19+
"dev:compiler": "rollup -w -c build/config.js --environment TARGET:web-compiler ",
20+
"dev:weex": "rollup -w -c build/config.js --environment TARGET:weex-framework ",
21+
"dev:weex:compiler": "rollup -w -c build/config.js --environment TARGET:weex-compiler ",
2222
"build": "node build/build.js",
2323
"build:ssr": "npm run build -- vue.runtime.common.js,vue-server-renderer",
2424
"build:weex": "npm run build -- weex-vue-framework,weex-template-compiler",
@@ -32,8 +32,8 @@
3232
"test:types": "tsc -p ./types/test/tsconfig.json",
3333
"lint": "eslint src build test",
3434
"flow": "flow check",
35-
"sauce": "SAUCE=true karma start build/karma.sauce.config.js",
36-
"bench:ssr": "npm run build:ssr && NODE_ENV=production node benchmarks/ssr/renderToString.js && NODE_ENV=production VUE_ENV=server node benchmarks/ssr/renderToStream.js",
35+
"sauce": "karma start build/karma.sauce.config.js",
36+
"bench:ssr": "npm run build:ssr && node benchmarks/ssr/renderToString.js && node benchmarks/ssr/renderToStream.js",
3737
"release": "bash build/release.sh",
3838
"release:weex": "bash build/release-weex.sh",
3939
"install:hooks": "ln -fs ../../build/git-hooks/pre-commit .git/hooks/pre-commit"

src/core/instance/init.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@ let uid = 0
1515
// [wangnew2013]:2017-02-16 16:20:37 Vue是一个节点类型为Component的树
1616
export function initMixin (Vue: Class<Component>) {
1717
Vue.prototype._init = function (options?: Object) {
18+
const vm: Component = this
19+
// a uid
20+
vm._uid = uid++
21+
1822
/* istanbul ignore if */
23+
let startTag, endTag
1924
if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
20-
mark('vue-perf-init')
25+
startTag = `vue-perf-init:${vm._uid}`
26+
endTag = `vue-perf-end:${vm._uid}`
27+
mark(startTag)
2128
}
2229

23-
const vm: Component = this
24-
// a uid
25-
vm._uid = uid++
2630
// a flag to avoid this being observed
2731
vm._isVue = true
2832
// merge options
@@ -58,8 +62,8 @@ export function initMixin (Vue: Class<Component>) {
5862
/* istanbul ignore if */
5963
if (process.env.NODE_ENV !== 'production' && config.performance && mark) {
6064
vm._name = formatComponentName(vm, false)
61-
mark('vue-perf-init-end')
62-
measure(`${vm._name} init`, 'vue-perf-init', 'vue-perf-init-end')
65+
mark(endTag)
66+
measure(`${vm._name} init`, startTag, endTag)
6367
}
6468

6569
if (vm.$options.el) {

src/core/instance/state.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,19 @@ import {
77
set,
88
del,
99
observe,
10-
defineReactive,
11-
observerState
10+
observerState,
11+
defineReactive
1212
} from '../observer/index'
1313

1414
import {
1515
warn,
16+
bind,
17+
noop,
1618
hasOwn,
1719
isReserved,
18-
isPlainObject,
19-
bind,
20+
handleError,
2021
validateProp,
21-
noop
22+
isPlainObject
2223
} from '../util/index'
2324

2425
const sharedPropertyDefinition = {
@@ -101,7 +102,7 @@ function initProps (vm: Component, propsOptions: Object) {
101102
function initData (vm: Component) {
102103
let data = vm.$options.data
103104
data = vm._data = typeof data === 'function'
104-
? data.call(vm)
105+
? getData(data, vm)
105106
: data || {}
106107
if (!isPlainObject(data)) {
107108
data = {}
@@ -130,6 +131,15 @@ function initData (vm: Component) {
130131
observe(data, true /* asRootData */)
131132
}
132133

134+
function getData (data: Function, vm: Component): any {
135+
try {
136+
return data.call(vm)
137+
} catch (e) {
138+
handleError(e, vm, `data()`)
139+
return {}
140+
}
141+
}
142+
133143
const computedWatcherOptions = { lazy: true }
134144

135145
function initComputed (vm: Component, computed: Object) {

test/unit/features/error-handling.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ describe('Error handling', () => {
77
// hooks that prevents the component from rendering, but should not
88
// break parent component
99
;[
10+
['data', 'data()'],
1011
['render', 'render function'],
1112
['beforeCreate', 'beforeCreate hook'],
1213
['created', 'created hook'],
@@ -128,6 +129,16 @@ describe('Error handling', () => {
128129
function createErrorTestComponents () {
129130
const components = {}
130131

132+
// data
133+
components.data = {
134+
data () {
135+
throw new Error('data')
136+
},
137+
render (h) {
138+
return h('div')
139+
}
140+
}
141+
131142
// render error
132143
components.render = {
133144
render (h) {

0 commit comments

Comments
 (0)