将 Aurelia 与 Webpack 结合使用时找不到模块 'jquery-ui'

Cannot find module 'jquery-ui' when using Aurelia with Webpack

我试图让一个简单的日期选择器在 aurelia 中工作,但我想我在这里错过了一些非常基本的东西。

我在这里使用带有 webpack 的 aurelia 框架

https://github.com/aurelia/skeleton-navigation/tree/master/skeleton-typescript-webpack

在此之后,我假设接下来安装 Jquery-ui。

http://ilikekillnerds.com/2016/02/using-jquery-ui-widgets-in-aurelia/

看着这里,一切似乎都很简单。但无论我做什么我都会得到 “[ts] 在此行

上找不到模块 'jquery-ui'”
import { datepicker } from "jquery-ui";

我不知道如何让模块正常工作。

npm install jquery
npm install jquery-ui 
tsd install jquery
tsd install jqueryui

这里还缺少什么吗?

因为我使用了 webpack,所以我不需要任何 jspm 魔法?还是我想的?

编辑:

这里看起来像

npm install jquery-ui --save

就是我所需要的。还是一样的问题

编辑:完成 datepicker.ts 代码

import { customElement, bindable, inject } from "aurelia-framework";

import "jquery";
import { datepicker } from "jquery-ui";

@customElement('jquery-ui-datepicker')
@inject(Element)
export class JqueryUiDatepicker {
    @bindable id = '';
    @bindable name = '';
    @bindable options = {};

    constructor(Element) {
        this.element = Element;

        if (!this.id && this.name) {
            this.id = this.name;
        }

        if (!this.name && this.id) {
            this.name = this.id;
        }
    }

    attached() {
        $(`#${this.id}`).datepicker(this.options)
            .on('change', e => {
                let changeEvent = new CustomEvent('input', {
                    detail: {
                        value: e.val
                    },
                    bubbles: true
                });

                this.element.dispatchEvent(changeEvent);
            });
    }

    detached() {
        $(`#${this.id}`).datepicker('destroy').off('change');
    }
}

由于 jquery-ui 不导出任何内容,您只需导入它,无需加载任何对象或函数。

因此,替换为:

import { datepicker } from "jquery-ui";

为此:

import "jquery-ui";
//if you want to load only the datepicker, use "jquery-ui/datepicker";

现在您可以使用 jquery-ui 扩展函数,例如 $.datepicker、$.accordion 等

但是,还有一个问题。与 SystemJS 不同,webpack 似乎不会自动加载 css 文件,除非它在模块文件中明确加载。

因此,您还必须加载 css 文件。像这样:

import "../node_modules/jquery-ui/themes/base/jquery-ui.css"
//if you want to load only the datepicker, use "../node_modules/jquery-ui/themes/base/jquery.ui.datepicker.css"

简而言之,这就是您所需要的:

import $ from "jquery";
import "jquery-ui";
import "../node_modules/jquery-ui/themes/base/jquery-ui.css";

Webpack 会将所有引用的 css 打包到一个文件中,这意味着在项目中引用 "node_modules" 文件夹不是什么大问题,因为您不必在生产环境。

如果在整个应用程序中使用jquery-ui,则在main.js或app.js文件中加载是一个很好的候选者。

希望对您有所帮助!