【问题标题】:Typescript 9.5+; import bootstrap into an AMD module to use jquery extensions打字稿 9.5+;将引导程序导入 AMD 模块以使用 jquery 扩展
【发布时间】:2014-03-31 13:31:12
【问题描述】:

全部。

我在 AMD 模式下使用 require.js 和 TypeScript,但在将 Bootstrap 导入我的脚本时遇到问题。我有这样的导入语句;

import $ = require('jquery');
import ko = require('knockout');
import bootstrap = require('bootstrap');

它正在将它转换成这个 JavaScript;

define(["require", "exports", 'jquery', 'knockout'], 
    function(require, exports, $, ko) {
    ...
});

请注意,Bootstrap 不在所需模块列表中。那是因为 TypeScript 很“聪明”,注意到我从来没有像这样引用 Bootstrap 导入;

// this never appears in my code
bootstrap.blah()

并删除“未使用”引导导入。在正常情况下,这很好,但 bootstrap 实际上扩展了 jQuery,添加了类似

// bootstrap adds jQuery plugins like modal;
$(selector).modal()

因此,通过删除包含,jQuery 不再扩展为 modal() 等,我的代码失败了。

我需要的是一种告诉 TypeScript 它确实需要在所需模块列表中包含 'bootstrap'module 的方法。

有什么想法吗?

【问题讨论】:

    标签: twitter-bootstrap requirejs typescript amd definitelytyped


    【解决方案1】:

    您可以通过在文件顶部添加以下内容来利用这个(记录不充分的)小技巧:

    /// <amd-dependecy path="bootstrap">
    

    这将在 AMD 依赖项列表中添加 bootstrap

    【讨论】:

    • 谢谢!我很快就会试一试。
    【解决方案2】:

    您可能需要一个 require.config 部分,并为 boostrap 指定一个 shim。
    这样,jquery 和 boostrap 都将它们的函数导出到任何 $ 或 jquery 选择器。

    类似:

    require.config({
        baseUrl: '../',
        paths: {
            'jquery': 'lib/jquery-1.7.2',
            'boostrap': 'lib/boostrap',
        }, 
        shim: {
            jquery: {
                exports: '$'
            },
            boostrap: {
                exports: '$'
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2015-07-23
      • 2022-01-14
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多