@@ -48,7 +48,7 @@ async function handlePrerenderError(err, env, stack, entry) {
48
48
let sourceMapContent , position , sourcePath , sourceLines , sourceCodeHighlight ;
49
49
50
50
try {
51
- sourceMapContent = JSON . parse ( readFileSync ( `${ entry } .map` ) ) ;
51
+ sourceMapContent = JSON . parse ( readFileSync ( `${ entry } .map` , 'utf-8' ) ) ;
52
52
} catch ( err ) {
53
53
process . stderr . write ( red ( `Unable to read sourcemap: ${ entry } .map\n` ) ) ;
54
54
}
@@ -100,39 +100,51 @@ async function handlePrerenderError(err, env, stack, entry) {
100
100
101
101
process . stderr . write ( '\n' ) ;
102
102
process . stderr . write ( red ( `${ errorMessage } \n` ) ) ;
103
- process . stderr . write ( `method: ${ methodName } \n` ) ;
104
- if ( sourceMapContent ) {
103
+ // check if we have methodName (ie, the error originated in user code)
104
+ if ( methodName ) {
105
+ process . stderr . write ( `method: ${ methodName } \n` ) ;
106
+ if ( sourceMapContent & sourceCodeHighlight ) {
107
+ process . stderr . write (
108
+ `at: ${ sourcePath } :${ position . line } :${ position . column } \n`
109
+ ) ;
110
+ process . stderr . write ( '\n' ) ;
111
+ process . stderr . write ( 'Source code:\n\n' ) ;
112
+ process . stderr . write ( sourceCodeHighlight ) ;
113
+ process . stderr . write ( '\n' ) ;
114
+ } else {
115
+ process . stderr . write ( '\n' ) ;
116
+ process . stderr . write ( 'Stack:\n\n' ) ;
117
+ process . stderr . write ( JSON . stringify ( stack , null , 4 ) + '\n' ) ;
118
+ }
119
+ } else {
105
120
process . stderr . write (
106
- `at: ${ sourcePath } :${ position . line } :${ position . column } \n`
121
+ yellow (
122
+ 'Cannot determine error position. This most likely means it originated in node_modules.'
123
+ )
107
124
) ;
108
- process . stderr . write ( '\n' ) ;
109
- process . stderr . write ( 'Source code:\n\n' ) ;
110
- process . stderr . write ( sourceCodeHighlight ) ;
111
- process . stderr . write ( '\n' ) ;
112
- } else {
113
- process . stderr . write ( stack . toString ( ) + '\n' ) ;
125
+ process . stderr . write ( '\n\n' ) ;
114
126
}
115
127
process . stderr . write (
116
128
`This ${
117
129
isReferenceError ? 'is most likely' : 'could be'
118
130
} caused by using DOM or Web APIs.\n`
119
131
) ;
120
132
process . stderr . write (
121
- ` Pre-render runs in node and has no access to globals available in browsers.\n\n`
133
+ ' Pre-render runs in node and has no access to globals available in browsers.\n\n'
122
134
) ;
123
135
process . stderr . write (
124
- ` Consider wrapping code producing error in: ' if (typeof window !== "undefined") { ... }'\n`
136
+ ' Consider wrapping code producing error in: " if (typeof window !== "undefined") { ... }"\n'
125
137
) ;
126
138
127
139
if ( methodName === 'componentWillMount' ) {
128
- process . stderr . write ( ` or place logic in ' componentDidMount' method.\n` ) ;
140
+ process . stderr . write ( ' or place logic in " componentDidMount" method.\n' ) ;
129
141
}
130
142
process . stderr . write ( '\n' ) ;
131
143
process . stderr . write (
132
- ` Alternatively use ' preact build --no-prerender' to disable prerendering.\n\n`
144
+ ' Alternatively use " preact build --no-prerender" to disable prerendering.\n\n'
133
145
) ;
134
146
process . stderr . write (
135
- 'See https://github.com/developit /preact-cli#pre-rendering for further information.'
147
+ 'See https://github.com/preactjs /preact-cli#pre-rendering for further information.\n\n '
136
148
) ;
137
149
process . exit ( 1 ) ;
138
150
}
0 commit comments