2016-05-02 27 views
6

Tôi đang cố gắng thiết lập tách/chia nhỏ mã trong ứng dụng của mình - theo tuyến đường, sử dụng require.ensure. Vì vậy, đây là con đường của tôi:Thiết lập chia tách mã trong Webpack và React.js

<Route path="profile" 
     getComponent={(location, cb) => 
     {require.ensure(
      [], 
      (require) => { cb(null, require('attendee/containers/Profile/').default) }, 
      'attendee')}} /> 

Dưới đây là dòng có liên quan từ webpack cấu hình của tôi:

const PATHS = { 
    app: path.join(__dirname, '../src'), 
    build: path.join(__dirname, '../dist'), 
}; 

const common = { 
    entry: [ 
    PATHS.app, 
    ], 

    output: { 
    path: PATHS.build, 
    publicPath: PATHS.build + '/', 
    filename: '[name].js', 
    chunkFilename: '[name].js', 
    sourceMapFilename: '[name].js.map' 
    }, 

    target: 'web', 

devtool: 'cheap-module-eval-source-map', 
entry: [ 
    'bootstrap-loader', 
    'webpack-hot-middleware/client', 
    './src/index', 
], 
output: { 
    publicPath: '/dist/', 
}, 


plugins: [ 
    new webpack.DefinePlugin({ 
    'process.env': { 
     NODE_ENV: '"development"', 
    }, 
    __DEVELOPMENT__: true, 
    }), 
    new ExtractTextPlugin('main.css'), 
    new webpack.optimize.OccurenceOrderPlugin(), 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoErrorsPlugin(), 
    new webpack.ProvidePlugin({ 
    jQuery: 'jquery', 
    }), 
], 

Khi tôi hướng đến trang ở các tuyến đường, tôi thấy trong các bản ghi rằng đoạn cần thiết không được tải về . Tuy nhiên, trang không tải.

Và tôi nhìn thấy vết đống sau trong giao diện điều khiển:

Uncaught TypeError: Cannot read property 'call' of undefined 
t      @ main.js:10 
(anonymous function) @ main.js:44637 
window.webpackJsonp @ main.js:40 
(anonymous function) @ attendee.js:1 

Dòng nó than phiền về là thế này:

return e[n].call(o.exports, o, o.exports, t) 

Dòng thứ hai ((chức năng ẩn danh) @ main.js: 44637) về bản chất là:

require('attendee/containers/Profile/').default 

Lưu ý, nếu tôi làm console.log(require('./attendee/containers/Profile/').default), tôi sẽ có một hàm s một đầu ra, vì vậy tôi không chắc chắn lý do tại sao nó là không xác định. Và tất nhiên khi tôi làm điều đó, mã này hoạt động, nhưng không còn chunking nữa.

Vì vậy, tôi đang làm điều gì đó sai với require. Bất kỳ ý tưởng nó là gì?

BTW Tôi đang sử dụng lịch sử băm trong dự án này - đây có phải là thủ phạm không?

Cập nhật:

Cũng cố gắng bó-loader như trong this answer. Cùng một kết quả.

+0

Cảm ơn cho thẻ gợi ý. Các tài liệu đề cập đến rằng có một đối số tùy chọn thứ ba, đó là tên đoạn. Nó không được bỏ qua, tên tập tin cho đoạn này là participee.js - webpack sử dụng nó. Bạn có thể sử dụng nó được cho là để có được một vài tuyến đường để có được đóng gói vào cùng một đoạn tên. –

+0

Đã cố gắng xóa thông số thứ ba - không thay đổi ngoại trừ tên của tệp tin chunk - bây giờ là 2.js. –

+0

Tôi rất tiếc vì tôi không có bất kỳ lời khuyên nào khác để giải quyết vấn đề của bạn. –

Trả lời

0

bạn sắp hoàn tất! Hãy thử điều này: bạn cần phải cụ thể các mảng của module phụ thuộc trước thời hạn trong đối số đầu tiên của require.ensure thay vì [] thiết lập một cách rõ ràng để ['attendee/containers/Profile']

(location, cb) => { 
    require.ensure(['attendee/containers/Profile'], (require) => { 
    cb(null, require('attendee/containers/Profile').default) 
    }) 
} 
+0

Tôi thực sự đã thử nó - cùng một kết quả –

+0

bất kỳ cơ hội nào chúng ta có thể thấy những gì 'người tham dự/thùng chứa/Hồ sơ' trông như thế nào? –

+0

'Hồ sơ' nhập toàn bộ đống nội dung. Tôi có phải đặt tất cả những gì vào mảng? Từ những gì tôi đọc webpack nên chạy xung quanh và tìm tất cả các phụ thuộc cho tôi ... –

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