2016-12-23 19 views
5

Tôi đã tải select2 như mô-đun nút bởi:Cách sử dụng select2 với webpack?

npm install select2 

và đưa nó vào app.js tôi:

require('select2')($); 


Khi tôi chạy webpack không có lỗi, nhưng khi tôi mở ứng dụng Tôi nhận được:

Uncaught TypeError: Object.defineProperty called on non-object(…) 

đến từ select2.js:

S2.define('select2/core',[ 
    'jquery', 
    './options', 
    './utils', 
    './keys' 
], function ($, Options, Utils, KEYS) { 
(...) 
} 

Liệu nó xảy ra bởi vì mô-đun wrapper cho select2 chỉ làm việc với AMD và không tương thích với CommonJS?

Trả lời

1

Nơi nào bạn thấy đây là cách sử dụng select2? Theo như tôi có thể nhìn thấy từ liếc nhìn vào dự án, bạn cần jquery cài đặt như một dep nhưng sau đó nó sẽ là automatically required.

Nhìn vào chữ ký của chức năng xuất khẩu có vẻ như nó có thể mất một yếu tố và các tùy chọn jQuery: https://github.com/select2/select2/blob/master/dist/js/select2.js#L5052

Tuy nhiên sau khi nhập nó, nó sẽ chỉ được gắn liền với jQuery như là một plugin, vì vậy tôi nghĩ rằng rằng $('.some-element').select2([options]); cũng sẽ hoạt động.

Vì vậy, bạn đã chỉ cần thử require('select2') (và npm i jquery --save nếu bạn chưa có)?

+0

Tất nhiên tôi đã có jquery, tôi nghĩ rằng nó là quá rõ ràng để đề cập đến điều đó. Vấn đề là một số plugin jquery được bao bọc trong UMD, một số kiểm tra kỳ quặc nếu tôi sử dụng AMD, CommonJS hoặc không, và kiểm tra này ngắt trong Webpack, vì Webpack hỗ trợ cả hai, vì vậy UMD wrapper giả sử tôi sử dụng AMD mặc dù tôi sử dụng commonJS. Có một hacky [workaround] (http://stackoverflow.com/questions/28969861/managing-jquery-plugin-dependency-in-webpack) cho điều này trong câu trả lời được chấp nhận ở # 4. –

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