【发布时间】:2016-09-09 20:46:48
【问题描述】:
我有一个用作库的 es6 js 文件。如您所见,js 文件依赖于 jquery。我正在使用 Webpack。
在 JS 文件中,我在下面复制的最终 es5 代码中有以下行导致 _interopRequireWildcard。由于 jquery 不是 esModule,在评估条件 obj && obj.__esModule 之后,jQuery 函数被复制到一个对象。我也将此代码与打字稿一起使用。它适用于 Typescript,但适用于 es6。
ES6代码sn-p
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 代码
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;
【问题讨论】:
-
试试
import $ from 'jquery'; -
有什么区别?
-
它只针对默认导出,它作为
module.exports被转换为commonJS(假设你的jQuery 版本有commonJS 的钩子)。有用吗?
标签: javascript jquery typescript ecmascript-6 webpack