如何在webpack中使用select2?

van*_*ert 7 javascript npm jquery-select2 webpack select2

我已select2通过以下方式下载为节点模块:

npm install select2
Run Code Online (Sandbox Code Playgroud)

并把它包括在我的app.js:

require('select2')($);
Run Code Online (Sandbox Code Playgroud)


当我运行webpack时没有错误,但当我打开应用程序时,我得到:

Uncaught TypeError: Object.defineProperty called on non-object(…)
Run Code Online (Sandbox Code Playgroud)

来自select2.js:

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

是否因为模块封装器select2仅适用于AMD且与CommonJS不兼容而发生?

Dom*_*nic 2

你在哪里看到这是如何使用 select2 的?据我从项目中看到的,您需要jquery作为 dep 安装,但随后它会自动被需要

查看导出函数的签名,它看起来可能需要 jQuery 元素和选项: https: //github.com/select2/select2/blob/master/dist/js/select2.js#L5052

但是导入它之后,它应该作为插件附加到 jQuery,所以我认为这$('.some-element').select2([options]);也可以。

那么您是否只是尝试过require('select2')npm i jquery --save如果没有)?

  • 当然我有jquery,我认为提及这一点太明显了。问题是一些 jquery 插件被包装在 UMD 中,如果我使用 AMD、CommonJS 或不使用,它会执行一些奇怪的检查,并且此检查在 Webpack 中中断,因为 Webpack 支持两者,所以 UMD 包装器假设我使用 AMD,即使我使用 commonJS。在#4 接受的答案中有一个 hacky [解决方法](http://stackoverflow.com/questions/28969861/managing-jquery-plugin-dependency-in-webpack)。 (4认同)