@@ -48,7 +48,7 @@ async function handlePrerenderError(err, env, stack, entry) {
4848 let sourceMapContent , position , sourcePath , sourceLines , sourceCodeHighlight ;
4949
5050 try {
51- sourceMapContent = JSON . parse ( readFileSync ( `${ entry } .map` ) ) ;
51+ sourceMapContent = JSON . parse ( readFileSync ( `${ entry } .map` , 'utf-8' ) ) ;
5252 } catch ( err ) {
5353 process . stderr . write ( red ( `Unable to read sourcemap: ${ entry } .map\n` ) ) ;
5454 }
@@ -100,39 +100,51 @@ async function handlePrerenderError(err, env, stack, entry) {
100100
101101 process . stderr . write ( '\n' ) ;
102102 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 {
105120 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+ )
107124 ) ;
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' ) ;
114126 }
115127 process . stderr . write (
116128 `This ${
117129 isReferenceError ? 'is most likely' : 'could be'
118130 } caused by using DOM or Web APIs.\n`
119131 ) ;
120132 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'
122134 ) ;
123135 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'
125137 ) ;
126138
127139 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' ) ;
129141 }
130142 process . stderr . write ( '\n' ) ;
131143 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'
133145 ) ;
134146 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 '
136148 ) ;
137149 process . exit ( 1 ) ;
138150}
0 commit comments