1

我正在尝试在TypeScript + React + Webpack2设置中测试 Ant Design 组件。

我正在DatePicker手动导入组件,以便 webpack 可以将其取出并将其构建到我的包中。

import * as React from "react";
import * as moment from "moment";
import DatePicker from 'antd/lib/date-picker';
import "antd/lib/date-picker/style/css";

export default class TestComponent extends React.Component<any, any> {
    render(): JSX.Element {
        return <DatePicker value={moment(new Date())} format={"YYYY.mm.dd."}/>;
    }
}

但是当我尝试在浏览器中运行编译后的代码时,组件不会呈现,因为特定的导入会编译成这个最终代码。

Object.defineProperty(exports, "__esModule", { value: true });
var React = __webpack_require__(4);
var moment = __webpack_require__(0);
var date_picker_1 = __webpack_require__(287);
__webpack_require__(289);
var TestComponent = (function (_super) {
    __extends(TestComponent, _super);
    function TestComponent() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    TestComponent.prototype.render = function () {
        return React.createElement(date_picker_1.default, { value: moment(new Date()), format: "YYYY.mm.dd." });
    };
    return TestComponent;
}(React.Component));
exports.default = TestComponent;

请注意date_picker_1.default参考,即undefined,并导致错误。

为什么会这样?它不应该调用default导入的对象,只需使用它,因为它是DateTimePicker组件本身。

我有以下设置。TypeScript 编译成es5使用commonjs模块系统。这是由awesome-typescript-loaderwebpack 加载器完成的。其余的应该由 webpack 自己完成。

4

1 回答 1

0

DateTimePicker 确实有一个默认导出(请参阅底部的 lib/date-picker/index.js),但是当 TypeScript 将其编译为 commonjs 模块时,会出现某种问题。

Webpack 2 开箱即用地处理 ES 模块,因此您应该将导入留给 webpack。只需将编译器选项更改modulees6.

"module": "es6"

您可以更改它而无需更改目标,因此它仍然输出es5但不使用 commonjs 模块。来自TypeScript - 编译器选项

► 当目标为“ES5”或更低时,可以使用“ES6”和“ES2015”值。

于 2017-04-13T22:12:33.487 回答