2015-10-14 13 views
14

Trên máy chủ sản xuất của chúng tôi, tôi đã minified javascript được xuất bản và tôi không bao gồm một tệp bản đồ với nó, bởi vì tôi không muốn người dùng có thể hiểu những gì đang xảy ra dựa trên lỗi.Làm cách nào để có thể theo dõi ngăn xếp javascript được rút gọn và chạy nó trên bản đồ nguồn để nhận được lỗi thích hợp?

Tôi có dịch vụ ghi nhật ký mà tôi đã viết để chuyển tiếp ngoại lệ góc (bị $ exceptionHandler) đánh cắp cho chính tôi qua email. Tuy nhiên, vết đống này là gần đọc:

n is not defined 
    at o (http://localhost:9000/build/app.min.js:1:3284) 
    at new NameController (http://localhost:9000/build/app.min.js:1:3412) 
    at e (http://localhost:9000/build/bower.min.js:44:193) 
    at Object.g.instantiate (http://localhost:9000/build/bower.min.js:44:310) 
    at b.$get (http://localhost:9000/build/bower.min.js:85:313) 
    at d.compile (http://localhost:9000/build/bower.min.js:321:23333) 
    at aa (http://localhost:9000/build/bower.min.js:78:90) 
    at K (http://localhost:9000/build/bower.min.js:67:39) 
    at g (http://localhost:9000/build/bower.min.js:59:410) 
    at http://localhost:9000/build/bower.min.js:58:480 <ui-view class="ng-scope"> 

Những gì tôi đang tự hỏi là: Có một chương trình mà tôi có thể phân tích vết đống này để chống lại các mã nguồn không minified thực tế qua tập tin bản đồ (hoặc không thông qua bản đồ nếu có cách khác)

+0

Tôi có thể tìm thấy một số công cụ thích hợp cho vấn đề này: - http://www.stacktracejs.com/ - http://sourcemaps.info/ (trên GitHub: https://github.com/bugsnag/sourcemaps .thông tin) Điều này có thể chuyển đổi theo dõi ngăn xếp được thu nhỏ thành dấu vết ngăn xếp phát triển. –

+0

sourcemaps.info thực hiện chính xác những gì OP hỏi và những gì tôi cần. Cảm ơn! Một mẹo vì tôi đã bị ném đầu tiên: bạn không cần bản đồ nguồn công khai. Sau khi dán trong dấu vết ngăn xếp của bạn nếu nó không thể tìm thấy chúng, nó sẽ cho bạn một hộp để dán trong sourcemap theo cách thủ công. Không phải là một UX tuyệt vời, và nó liên tục tiêu thụ CPU, nhưng chức năng là tại chỗ trên :). –

+0

bạn có tìm thấy giải pháp cho vấn đề này không? –

Trả lời

-1

Nối chỉ thị nhận xét cho JS đang chạy trong trang.

// # sourceMappingURL =/path/to/your/sourcemap.map

Trong firefox (không chắc chắn về chrome) để nói với Debugger để sử dụng bản đồ nguồn nếu họ có sẵn, nhấp vào "Cài đặt Debugger" và chọn "Hiển thị nguồn gốc" từ danh sách cài đặt bật lên:

+1

Điều đó tốt nếu tôi muốn bản đồ nguồn hoạt động khi thực thi ứng dụng, nhưng tôi không muốn người dùng có bản đồ nguồn . Tôi chỉ muốn có thể phân tích dấu vết ngăn xếp –

1

Nếu bạn có quyền truy cập vào tệp bản đồ nguồn bên ngoài và có thể có cùng cấu trúc tệp bạn có thể làm việc đó, nhưng tôi không nhận thức được bất kỳ công cụ nào bên ngoài trình duyệt sẽ giúp bạn thực hiện điều đó.

Lợi thế bổ sung của việc có dữ liệu trong trình duyệt đang chạy sẽ cho phép kiểm tra người dân địa phương mà bạn sẽ không nhận được ngay cả với bản đồ nguồn.

Bạn có thể muốn xem xét một công cụ như rollbar để thực hiện báo cáo lỗi. Điều này sẽ báo cáo tất cả những người dân địa phương trong mỗi khung hình để giúp gỡ lỗi. Nó có hỗ trợ cho sourcemaps outside the browser để giải quyết các vấn đề an ninh của bạn.

+0

Cảm ơn bạn đã đề xuất! Điều đó sẽ khá hữu ích, nhưng công ty chúng tôi có lẽ sẽ yêu cầu giấy phép doanh nghiệp từ rollbar, và tôi nghi ngờ tôi có thể thuyết phục ông chủ của tôi chi 1000 đô la một tháng cho điều đó. Đó chắc chắn là một giải pháp mặc dù –

+0

Đó chắc chắn là rất nhiều để trả tiền chỉ để kiểm tra nơi xảy ra lỗi này! – Euan

+1

Đúng, chính xác. Và lỗi cụ thể này là lỗi mà tôi cố ý gây ra để chứng minh một điểm. Ứng dụng của chúng tôi là vài tháng kể từ khi sản xuất, nhưng tôi đang cố gắng giải quyết một giải pháp khắc phục lỗi sớm trong quá trình này. –

9

Điều bạn muốn làm là phân tích cú pháp bản đồ nguồn. Điều này không liên quan gì đến trình duyệt web. Tất cả những gì bạn cần làm là dịch tham chiếu được rút gọn vào tài nguyên chưa được sửa đổi.

Nếu bạn có bất kỳ trải nghiệm nào với NodeJS thì đã có một gói thực hiện điều này cho bạn.

https://github.com/mozilla/source-map/

Để cài đặt các thư viện

npm install -g source-map 

Tạo một file có tên "issue.js"

fs = require('fs'); 
var sourceMap = require('source-map'); 
var smc = new sourceMap.sourceMapConsumer(fs.readFileSync("./app.min.js.map","utf8")); 
console.log(smc.originalPositionFor({line: 1, column: 3284})); 

Chạy file với nút

node issue.js 

Nó nên xuất vị trí trong tệp gốc vào bảng điều khiển cho dòng đầu tiên từ theo dõi ngăn xếp.

Lưu ý: Tôi bảo bạn cài đặt bản đồ nguồn trên toàn cầu để dễ sử dụng, nhưng bạn có thể tạo dự án nút thực hiện những gì bạn cần và cài đặt cục bộ.

+0

Đó là một ý tưởng tuyệt vời. Tôi hy vọng có một cái gì đó tôi có thể sử dụng để phân tích một dấu vết toàn bộ stack, nhưng tôi cho rằng tôi có thể viết một cái gì đó để đọc dòng dấu vết xếp hàng theo dòng để làm cùng một ý tưởng. Cám ơn vì sự gợi ý! –

+0

Google nodejs đọc từng dòng một tập tin, và sau đó kết hợp regex giữa '(..)' và bạn đã có dấu vết ngăn xếp của bạn từ một tệp văn bản. – cgTag

+0

Vâng, đó chính xác là những gì tôi định làm. –

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