2015-09-21 27 views
18

Tôi đang xây dựng hai dự án với webpack; một là thư viện cho người kia.Làm thế nào để tải bản đồ nguồn thư viện bằng cách sử dụng webpack?

Có thể tiêu thụ các sourcemaps từ dự án thư viện của tôi khi xây dựng dự án trình bao bọc của tôi không? Tôi muốn có khả năng gỡ lỗi mã thư viện của tôi khỏi giao diện người dùng của tôi.

Công trình xây dựng của tôi hoạt động chính xác khi thư viện được tích hợp. Vấn đề duy nhất là các bản đồ nguồn. JavaScript tôi thấy trong trình gỡ rối trình duyệt bị uglified, bởi vì sourcemaps không có sẵn.

Snippet của cấu trúc dự án của tôi:

+-- my-ui/ 
    +-- dist/ 
     +-- my-ui.js 
     +-- my-ui.js.map 
    +-- node_modules/ 
     +-- my-lib/ 
      +-- dist/ 
       +-- bundle.js 
       +-- bundle.js.map 

Snippet từ webpack.config.js:

module.exports = { 
    entry: './src/js/main.jsx', 
    output: { 
     path: path.join(__dirname, 'dist'), 
     filename: 'my-ui.js', 
     library: 'my-ui', 
     libraryTarget: 'umd' 
    }, 
    devtool: 'source-map', 
    module: { 
     loaders: [ 
      {test: /\.jsx?$/, loader: 'babel', include: path.join(__dirname, 'src')} 
     ] 
    }, 
    plugins: [ 
     new Clean('dist'), 
     new HtmlWebpackPlugin({ 
      template: 'src/index.html', 
      inject: true 
     }) 
    ] 
}; 
+1

Tôi chưa sử dụng nhưng tôi nghĩ * [source-map-loader] (https://github.com/webpack/source-map-loader) là những gì bạn đang tìm kiếm. Chỉ định nó làm 'trình tải trước' cho các tệp cần thiết. Điều này giả định rằng 'bundle.js' có chú thích bản đồ nguồn ở cuối –

+0

Hey @MichelleTilley! Tôi hiện đang cố gắng sử dụng 'nguồn-bản đồ-loader', nhưng tôi đã có một 'Không thể đọc thuộc tính' substr 'của undefined'. Bạn có biết nó có thể đến từ đâu không? Trong 'webpack.config.js' của tôi, tôi có:' devtool: 'source-map'', 'preLoaders: [{test:/\.js $ /, bộ nạp: "source-map-loader"}] ',' bộ tải: [{test: /\.ts$/, bộ nạp: 'ts-loader'}, {test: /\.html$/, bộ nạp: 'raw-loader'}, {test: /\.css$/, bộ nạp: 'style-loader! css-raw-loader'}] ' –

Trả lời

13

cuối cùng tôi đã tìm ra vấn đề của tôi ...

Nhờ @BinaryMuse for the tip trên source-map-loader . Đây thực sự là con đường đúng để đi, mặc dù ban đầu nó không làm việc cho tôi.

Điều cuối cùng tôi nhận ra là tôi cần bật source-map-loader cho gói web trong cả "my-lib" "my-ui" của mình. Nếu không có source-map-loader trong cấu hình gói webpack "my-lib", thì có lỗi source-map-loader bên trong lỗi "my-ui" (với thông báo cảnh báo đáng buồn) vì nó không thể định vị bản đồ nguồn cho các phụ thuộc chuyển tiếp của "my-lib". Rõ ràng các bản đồ nguồn quá tốt đến nỗi source-map-loader có thể nhìn trộm tất cả các khía cạnh của cây phụ thuộc.

Ngoài ra lưu ý, tôi gặp sự cố khi sử dụng source-map-loader kết hợp với react-hot-loader. Xem, react-hot-loader không bao gồm bản đồ nguồn. Khi source-map-loader cố gắng tìm chúng (vì nó chỉ quét tất cả mọi thứ), nó không thể và hủy bỏ mọi thứ.

Cuối cùng, tôi muốn source-map-loader có khả năng chịu lỗi hơn, nhưng khi được thiết lập chính xác, nó sẽ hoạt động!

devtool: 'source-map', 
module: { 
    preLoaders: [ 
     {test: /\.jsx?$/, loader: 'eslint', exclude: /node_modules/}, 
     {test: /\.jsx?$/, loader: 'source-map', exclude: /react-hot-loader/} 
    ], 
    loaders: [ 
     {test: /\.jsx?$/, loader: 'raect-hot!babel', exclude: /node_modules/} 
    ] 
} 
+0

Cảm ơn bạn đã đăng ký! Tôi cũng đang sử dụng bộ nạp phản ứng nóng với thiết lập này, và nó có thể giúp tôi tiết kiệm rất nhiều thời gian. (như lỗi bạn nhận được không phải là rất cụ thể!) – Venryx

-1

Bạn sẽ có thể sử dụng bất kỳ eval tùy chọn đồ nguồn mà Webpack cung cấp.

Thực sự chỉ là số tiền để đặt tùy chọn devtool đúng trong số webpack.config.js của bạn cho dự án my-lib.

devtool: 'eval', 

evaleval-source-maps cả hai đều hoạt động.

Xem Webpack source map documentation cho các tùy chọn khác nhau.

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