2017-05-15 16 views
7

HỆ THỐNG INFO:Webpack HMR Ném Phản ứng syntheticEvent Lỗi Do Để jsPDF

OSX 10.12.4 Sierra 
Node v7.10.0 
npm v4.2.0 

trình duyệt thử nghiệm:

Chrome 58.0.3029.110 
Safari 10.1 
Firefox 53.0 

CÁC VẤN ĐỀ:

Tôi có một ứng dụng đang chạy một cách hiệu quả trong sản xuất mà tôi đã nhân bản và đang cố gắng cập nhật để chuẩn bị xây dựng phần tiếp theo. Tuy nhiên, tôi đã gặp phải sự cố Webpack lạ khi cập nhật/React/HMR cho các bản dựng mới hơn.

HMR sẽ kết nối và Webpack xuất hiện để biên dịch tốt. Tuy nhiên, tương tác với các trang (như click) tạo ra các lỗi sau:

syntheticEvent Error

Rõ ràng, ứng dụng này là tại thời điểm đó không còn chức năng như nhấn điều không bắn ra bất cứ điều gì. Điều thú vị là, chúng tôi cũng nhận được lỗi sau 404 trong Node giao diện điều khiển và trên trình duyệt:

404 (Chú ý:. Này dường như là một chuỗi truy vấn khổng lồ các chức năng bao gồm, và đặc biệt là tham khảo syntheticEvent tôi có thể in toàn bộ điều cho bạn nếu bạn muốn)

NODE v6.3.1

NPMs LIÊN QUAN:

"react": "^15.5.4", 
"react-dom": "^15.5.4", 
"react-transform-catch-errors": "^1.0.0", 
"react-transform-hmr": "^1.0.4", 

"webpack": "^2.5.1", 
"webpack-dev-middleware": "^1.10.2", 
"webpack-hot-middleware": "^2.18.0" 

"babel-cli": "^6.11.4", 
"babel-core": "^6.24.1", 
"babel-eslint": "^7.2.1", 
"babel-loader": "^7.0.0", 
"babel-plugin-array-includes": "^2.0.0", 
"babel-plugin-transform-decorators-legacy": "^1.0.0", 
"babel-plugin-transform-object-assign": "^6.0.0", 
"babel-preset-es2015": "^6.24.1", 
"babel-preset-react": "^6.24.1", 
"babel-preset-react-hmre": "^1.1.1", 
"babel-preset-stage-1": "^6.24.1", 

WEBPACK.CONFIG.DEV.JS:

var path = require('path'); 
var webpack = require('webpack'); 
var autoprefixer = require('autoprefixer'); 
var hotMiddlewareScript = 'webpack-hot-middleware/client'; 

console.log('using the dev config file'); 
console.log('THE PUBLIC PATH: ' + path.join(__dirname, '/CLIENTSIDE/static')); 

module.exports = { 
    devtool: 'eval', 
    entry: { 
    background: ['webpack-hot-middleware/client', path.join(__dirname, '/CLIENTSIDE/components/background')], 
    uniqueShare: ['webpack-hot-middleware/client', path.join(__dirname, '/CLIENTSIDE/components/uniqueShare')], 
    starRating: ['webpack-hot-middleware/client', path.join(__dirname, '/CLIENTSIDE/components/starRating')], 
    testingPage: ['webpack-hot-middleware/client', path.join(__dirname, '/CLIENTSIDE/components/testingPage')], 
    style: ['webpack-hot-middleware/client', path.join(__dirname, '/CLIENTSIDE/components/style')] 
    }, 
    output: { 
    path: path.join(__dirname, '/CLIENTSIDE/static'), 
    filename: '[name].js', 
    publicPath: '/static/' 
    }, 
    plugins: [ 
    new webpack.optimize.OccurrenceOrderPlugin(), 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoEmitOnErrorsPlugin() 
    ], 
    module: { 
    loaders: [ 
     { 
      test: /\.(js|jsx)$/, 
      exclude: /(node_modules|bower_components)/, 
      loader: 'babel-loader', 
      query: { 
       cacheDirectory: true, 
       presets: ['react', 'es2015', 'stage-1'], 
       plugins: ['transform-decorators-legacy', 'transform-object-assign', 'array-includes'], 
      }, 
     }, 
     { 
      test: /\.scss$/, 
      loaders: ['style-loader', 'css-loader', 'sass-loader'] 
     } 
     ] 
    } 
    }; 

ĐÂU CHÚNG TÔI tải lên HMR:

console.log('****************************** RUNNING IN DEV MODE ******************************'); 
    var webpack = require('webpack'); 
    var webpackConfig = require('./webpack.config.dev'); 
    var compiler = webpack(webpackConfig); 

    console.log('Looking for the HMR here: ' + webpackConfig.output.publicPath); 

    app.use(require('webpack-dev-middleware')(compiler, { 
    noInfo: true, 
    publicPath: webpackConfig.output.publicPath 
    })); 

    app.use(require('webpack-hot-middleware')(compiler)); 

Bây giờ, đây là một phần kỳ lạ. Babel/Webpack biên dịch mọi thứ chỉ trong chế độ sản xuất mà không cần nạp lại nóng. Ứng dụng chạy hoàn toàn tốt khi chúng tôi đặt nút Node ENV thành 'PRODUCTION' - không có lỗi syntheticEvent.

Bên cạnh đó, các ứng dụng chạy trong chế độ dev (với nạp lại nóng) tốt bằng cách sử dụng ngăn xếp trước, trong đó bao gồm các phiên bản NPM sau:

"react": "^0.14.8", 
"react-dom": "^0.14.3", 
"react-transform-catch-errors": "^1.0.0", 
"react-transform-hmr": "^1.0.0", 

"webpack": "^1.13.1", 
"webpack-dev-middleware": "^1.2.0", 
"webpack-hot-middleware": "^2.0.0" 

"babel": "^6.5.2", 
"babel-cli": "^6.10.1", 
"babel-core": "^6.10.4", 
"babel-loader": "^6.2.4", 
"babel-plugin-transform-es2015-modules-commonjs": "^6.0.2", 
"babel-plugin-transform-react-constant-elements": "^6.0.2", 
"babel-preset-es2015": "^6.0.8", 
"babel-preset-react": "^6.0.2", 

CẬP NHẬT 5/16/17:

Chúng tôi đã tách biệt sự cố khi di chuyển khỏi React/React DOM 0.14.8 thành v15.0.0.Làm như vậy ngay lập tức kích hoạt lỗi của chúng tôi - nhưng chỉ chỉ ở chế độ HMR/Dev.

Bản xây dựng sản xuất, không có HMR, biên dịch tốt; tham chiếu các tệp được rút gọn mà Webpack tạo thông qua cấu hình đó cho phép chức năng ứng dụng 100% bình thường.

cùng một cấu trúc chính xác chạy 100% tiền phạt trong React/DOM 0.14.8, ở chế độ Dev, với HMR. Nâng cấp CHỈ Webpack/HMR/webpack-hot-middleware lên phiên bản mới nhất NOT kích hoạt lỗi.

tôi đã dành một số thời gian đào vào bảng debug và thấy như sau:

Clickeventobject Đây là một cái nhìn phong nha tại đối tượng sự kiện thực tế được tạo ra tự nhiên bởi phản ứng. Trong trường hợp này, "topClick" không được liên kết với bất kỳ trình xử lý nào chúng tôi đã tạo. Tôi thực sự có thể kích hoạt lỗi này & lỗi bằng cách nhấp vào bất kỳ đâu trên trang.

Where the error happens Đây là dòng nơi lỗi thực sự xảy ra. Nó đến từ phản ứng-dom/lib/SyntheticUIEvent.js - và dường như đã thất bại trong việc khởi tạo một phương pháp .call trên lớp SyntheticEvent ... enter image description here

Nó cũng đáng chú ý là giao diện điều khiển cũng bắn các lỗi sau mỗi khi bạn tải lại, điều đầu tiên.

GET http://localhost:3333/[object%20Object]?url=function%20SyntheticEvent(dispa…d%20%3D%20emptyFunction.thatReturnsFalse%3B%0A%20%20return%20this%3B%0A%7D 404 (Not Found) 
(anonymous) @ jspdf.debug.js:17350 
l @ jspdf.min.js:284 
u @ jspdf.min.js:284 
XHR @ jspdf.debug.js:17334 
Proxy @ jspdf.debug.js:16928 
(anonymous) @ SyntheticEvent.js:188 
(anonymous) @ SyntheticEvent.js:268 
(anonymous) @ background.js:805 
__webpack_require__ @ background.js:658 
fn @ background.js:86 
(anonymous) @ SyntheticCompositionEvent.js:13 
(anonymous) @ background.js:2110 
__webpack_require__ @ background.js:658 
fn @ background.js:86 
(anonymous) @ BeforeInputEventPlugin.js:16 
(anonymous) @ background.js:1767 
__webpack_require__ @ background.js:658 
fn @ background.js:86 
(anonymous) @ ReactDefaultInjection.js:14 
(anonymous) @ background.js:1963 
__webpack_require__ @ background.js:658 
fn @ background.js:86 
(anonymous) @ ReactDOM.js:16 
(anonymous) @ ReactDOM.js:111 
(anonymous) @ background.js:1844 
__webpack_require__ @ background.js:658 
fn @ background.js:86 
(anonymous) @ index.js:3 
(anonymous) @ background.js:812 
__webpack_require__ @ background.js:658 
fn @ background.js:86 
(anonymous) @ background.js:9 
(anonymous) @ background.js:3178 
__webpack_require__ @ background.js:658 
fn @ background.js:86 
(anonymous) @ background:2 
(anonymous) @ background.js:3287 
__webpack_require__ @ background.js:658 
(anonymous) @ background.js:707 
(anonymous) @ background.js:710 

Các lỗi tương tự từ các Node console:

GET /[object%20Object]?url=function%20SyntheticEvent(dispatchConfig%2C%20targetInst%2C%20nativeEvent%2C%20nativeEventTarget)%20%7B%0A%20%20if%20(process.env.NODE_ENV%20!%3D%3D%20%27production%27)%20%7B%0A%20%20%20%20%2F%2F%20these%20have%20a%20getter%2Fsetter%20for%20warnings%0A%20%20%20%20delete%20this.nativeEvent%3B%0A%20%20%20%20delete%20this.preventDefault%3B%0A%20%20%20%20delete%20this.stopPropagation%3B%0A%20%20%7D%0A%0A%20%20this.dispatchConfig%20%3D%20dispatchConfig%3B%0A%20%20this._targetInst%20%3D%20targetInst%3B%0A%20%20this.nativeEvent%20%3D%20nativeEvent%3B%0A%0A%20%20var%20Interface%20%3D%20this.constructor.Interface%3B%0A%20%20for%20(var%20propName%20in%20Interface)%20%7B%0A%20%20%20%20if%20(!Interface.hasOwnProperty(propName))%20%7B%0A%20%20%20%20%20%20continue%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(process.env.NODE_ENV%20!%3D%3D%20%27production%27)%20%7B%0A%20%20%20%20%20%20delete%20this%5BpropName%5D%3B%20%2F%2F%20this%20has%20a%20getter%2Fsetter%20for%20warnings%0A%20%20%20%20%7D%0A%20%20%20%20var%20normalize%20%3D%20Interface%5BpropName%5D%3B%0A%20%20%20%20if%20(normalize)%20%7B%0A%20%20%20%20%20%20this%5BpropName%5D%20%3D%20normalize(nativeEvent)%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20if%20(propName%20%3D%3D%3D%20%27target%27)%20%7B%0A%20%20%20%20%20%20%20%20this.target%20%3D%20nativeEventTarget%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20this%5BpropName%5D%20%3D%20nativeEvent%5BpropName%5D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20var%20defaultPrevented%20%3D%20nativeEvent.defaultPrevented%20!%3D%20null%20%3F%20nativeEvent.defaultPrevented%20%3A%20nativeEvent.returnValue%20%3D%3D%3D%20false%3B%0A%20%20if%20(defaultPrevented)%20%7B%0A%20%20%20%20this.isDefaultPrevented%20%3D%20emptyFunction.thatReturnsTrue%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20this.isDefaultPrevented%20%3D%20emptyFunction.thatReturnsFalse%3B%0A%20%20%7D%0A%20%20this.isPropagationStopped%20%3D%20emptyFunction.thatReturnsFalse%3B%0A%20%20return%20this%3B%0A%7D 404 4.745 ms - 35162 
+0

** CẬP NHẬT: ** Sau khi đào sâu hơn, có vẻ như việc nâng cấp lên React v15 + là điều làm hỏng mọi thứ - nhưng tôi không chắc chắn tại sao. v14.8 hoạt động tốt và không ** xuất hiện bất kỳ thay đổi nào để triển khai HMR qua Webpack 2/webpack-middleware trung gian đã xảy ra _đây là trình xử lý tải lại nóng của chúng tôi phản ứng: _ 'if (mô-đun .hot) { module.hot.Chấp nhận(); } ' – Zfalen

+0

bạn có thể chia sẻ mã nơi có lỗi này không? nơi bạn đang sử dụng đối tượng sự kiện? bạn đang cố gắng sử dụng đối tượng sự kiện trong một số loại hoạt động không đồng bộ? –

+0

Tôi không nghĩ rằng nó được gây ra bởi nâng cấp phản ứng một mình. Lỗi cơ bản có nghĩa là một đối tượng sự kiện nhấp chuột được chuyển đến một trong các hàm của bạn mà hy vọng nó có phương thức 'call'. Bạn phải hiển thị mã ném ngoại lệ và tất cả * thay đổi * của package.json –

Trả lời

2

CẬP NHẬT 5/24/17:

Cuối cùng chúng tôi đã tìm ra vấn đề - một sai lầm kinh điển!

Sau khi đặt lại toàn bộ ngăn xếp của mình để phù hợp hơn với create-react-app, tôi đã di chuyển ứng dụng React trước vào tệp chỉ mục máy chủ dev. Đã hoạt động như mong đợi, mặc dù không có gói và kiểu HTML phù hợp, v.v.

Tuy nhiên, khi tôi di chuyển trang HTML đầy đủ mà chúng tôi đưa ra ứng dụng thành yếu tố SyntheticEvent một lần nữa! Rất nhiều công việc và tái cấu trúc cuối cùng bị cô lập các vấn đề để các tập tin HTML (trong đó, thực tế, đã thực sự là một tập tin EJS ban đầu và chủ yếu có chứa một bộ xương cơ bản cũng như SEO theo dõi)

Dưới đây là các chà: chúng tôi có một thẻ <script/> đã lỗi thời đã gọi tới số jsPDF v1.2.61(https://github.com/MrRio/jsPDF). Chúng tôi không còn thực sự sử dụng plugin này và tập lệnh dường như đã lẻn vào mã của chúng tôi do xung đột hợp nhất.

Nhìn lại, mã được đăng trong OP không tham chiếu plugin jsPDF, nhưng theo dõi ngăn xếp không thực sự cung cấp bất kỳ dấu hiệu nào về lỗi bắt nguồn. Bởi vì chúng tôi đã không chạm vào plugin từ khi bắt đầu ứng dụng và theo đuổi một phương pháp thay thế, tên không đổ chuông bất kỳ - cho các cuộc gọi sau này đến các tập lệnh của React, tôi chỉ đơn giản giả định ba dòng đầu tiên theo dõi ngăn xếp chỉ ra jspdf là một phần tối nghĩa của thư viện React.

Có hai bản sửa lỗi cho vấn đề này:

  1. Tháo kịch bản hoàn toàn - đây là những gì chúng tôi đã làm, như chúng ta không còn đang sử dụng jsPDF trong ứng dụng của chúng tôi.
  2. Cập nhật jsPDF - plugin hiện tại là v1.3.4. Phiên bản trước, v1.2.61, tạo xung đột vi phạm với React v15.0.0+ tập lệnh thư viện gốc. Phiên bản mới KHÔNG tạo xung đột.

Hy vọng rằng điều này sẽ giúp ai đó xuống đường!

Chỉ tham chiếu; giải pháp trước đó đã không làm việc và nghiêng chúng tôi đến sửa chữa ở trên:

Để di chuyển dự án của chúng tôi về phía trước, chúng tôi đã chọn cho một ngăn xếp thay thế sử dụng create-react-appcustom-react-scripts.

https://github.com/facebookincubator/create-react-app

https://github.com/kitze/custom-react-scripts

Cuối cùng, chúng tôi đang (lỏng lẻo) sau mô hình này để chạy các CRA Ngăn xếp bên cạnh Node/nhanh thứ của chúng tôi đồng thời: https://www.fullstackreact.com/articles/using-create-react-app-with-a-server/

Vào cuối của ngày, điều này hoàn thành mục tiêu của chúng tôi là đẩy ngăn xếp mới vào các công nghệ cập nhật. Và, nó có lẽ là một chút sạch hơn so với những gì chúng tôi đã chạy trước đây.

Tuy nhiên, tôi vẫn là hoàn toàn được làm sáng tỏ về nguồn gốc của lỗi ở trên. Tôi đã di chuyển nội dung trong một loạt các ngăn xếp kiểm tra khác và dường như không sao chép vấn đề w/Webpack 2React 15+ - và không có gì khác biệt về cách tôi thiết lập chúng từ ngăn xếp ban đầu của chúng tôi.

Bất cứ điều gì đang diễn ra, nó rất lạ.

Các vấn đề liên quan