ES6 code not working with jQuery
我有一个用作库的 es6 js 文件。如您所见,js 文件依赖于 jquery。我正在使用 Webpack。
在 JS 文件中,我在下面复制的最终 es5 代码中生成了 _interopRequireWildcard 行。由于 jquery 不是 esModule,在评估条件
ES6 代码片段
1 2 3 4 5 6 7 | import * as $ from 'jquery'; let setupObject = function setupObject(element) { let aButton = $(dropdownButtonSelector); //Fail's here with error //Uncaught TypeError: $ is not a function } exports default setupObject; |
转译的 ES5 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | Object.defineProperty(exports,"__esModule", { value: true }); var _jquery = __webpack_require__(1); var $ = _interopRequireWildcard(_jquery); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { //obj.__esModule = undefined for jquery return obj; } else { var newObj = {}; if (obj != null ) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } var setupObject = function setupObject(element) { var aButton = $(dropdownButtonSelector); //Fail's here with error //Uncaught TypeError: $ is not a function } exports.default = setupObject; |
您的导入获取所有可用的导入并将它们package在一个对象中:
1 | import * as $ from 'jquery'; |
所以
1 | {Animation: function Animation(...),Callback: function (...), Deferred: function(...), default: function(selector, context){}, fn: Object[0], .... } |
因此你的
Uncaught TypeError: $ is not a function
(参见:http://www.2ality.com/2014/09/es6-modules-final.html#more_on_importing_and_exporting)
尝试使用以下语句,它只会导入
1 | import $ from 'jquery'; |
因为你的
我终于得到了可以同时使用 es6 和 typescript 的同一个文件。我实际上将代码更改为使用
最终的 ES6 代码片段
1 2 3 4 5 6 | var $ = require('jquery'); let setupObject = function setupObject(element) { let aButton = $(dropdownButtonSelector); //Fail's here with error //Uncaught TypeError: $ is not a function } exports default setupObject; |
使用 Webpack 转译 ES5 代码,将其用作 es6
1 2 3 4 5 6 7 8 9 10 11 | 'use strict'; Object.defineProperty(exports,"__esModule", { value: true }); var setupObject = function setupObject(element) { var $ = __webpack_require__(1); var aButton = $(dropdownButtonSelector); ... }; exports.default = setupDropdown; |
使用 Webpack 转译 ES5 代码,将其用作typescript
1 2 3 4 5 6 7 8 9 10 | !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports], __WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports) { "use strict"; var setupObject = function setupObject(element) { var $ = __webpack_require__(10); var aButton = $(dropdownButtonSelector); ... } Object.defineProperty(exports,"__esModule", { value: true }); exports.default = setupDropdown; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); |