Requirejs 如何在TypeScript中通过AMD要求jquery
我如何要求我的TypeScript模块使用jquery AMD模块。例如,假设脚本的目录结构如下所示: jquery-1.8.2.js jquery.d.ts module.ts require.js jquery-1.8.2.js jquery.d.ts 模块1.ts require.js 我希望module.ts生成的js文件要求通过require.js加载jquery-1.8.2.js 目前我有: import jquery = module('jquery') 导入jquery=模块('jquery') 这导致名称“jquery”在当前范围内不存在。首先从官方github repo获取()。在此之后,您的目录将如下所示:Requirejs 如何在TypeScript中通过AMD要求jquery,requirejs,typescript,Requirejs,Typescript,我如何要求我的TypeScript模块使用jquery AMD模块。例如,假设脚本的目录结构如下所示: jquery-1.8.2.js jquery.d.ts module.ts require.js jquery-1.8.2.js jquery.d.ts 模块1.ts require.js 我希望module.ts生成的js文件要求通过require.js加载jquery-1.8.2.js 目前我有: import jquery = module('jquery') 导
require-jquery.js
jquery.d.ts
main.ts
main.js
test.html
目前,在TypeScript上使用JQuery和AMD模块的最简单方法是在main.ts上编写以下内容:
///<reference path="jquery.d.ts" />
declare var require;
require(["jquery"], function($:JQueryStatic) {
$('body').append('<b>Hello JQuery AMD!</b>');
});
///
申报var要求;
require([“jquery”],函数($:JQueryStatic){
$('body').append('Hello JQuery AMD!');
});
并从test.html调用它:
<!DOCTYPE html>
<html>
<head>
<script data-main="main" src="require-jquery.js"></script>
</head>
<body>
<h1>TypeScript JQuery AMD test</h1>
</body>
</html>
typescriptjqueryamd测试
希望这有帮助
您可以通过路径和文件名(减去.js扩展名)引用外部模块,如果外部模块是全局模块,则仅通过文件名引用。在您的情况下,您应该在module.ts中执行此操作:
import jquery = module('./jquery-1.8.2');
请记住使用
--module AMD
进行编译,因为默认情况下,您会得到使用commonjsrequire
函数的代码。我认为这方面的很多混乱是由于jQuery实际上不像一个外部模块,它禁止使用import
语句。这个解决方案非常干净、简单、优雅,不会让人觉得像是一个工作环境
我写了一个简单的例子,它的工作原理如下
您可以从中获取RequireJS和jQuery的类型定义
您现在可以在TypeScript文件中使用原始RequireJS和静态类型
app.ts
///
///
require(['jquery'],函数($){
$(文档).ready(()=>{
警报('您的代码在jQuery加载后执行');
});
});
然后,您只需将单个脚本标记添加到页面:
<script data-main="app" src="require.js"></script>
相对于其他解决方案的好处
.d.ts
文件用于此文件)import {extend} from "jquery";
(如果安装了tsd,这仍然需要jquery.d.ts-tsd安装jquery
)
要安装tsd:npm安装tsd-g
对于TYPESCRIPT 0.9+
这不适用于Main.ts或Main.js。我需要一个模块(module.ts)来要求和加载jquery,但仍然需要将module.ts作为单独的模块由Typescript查看。你的解决方案似乎对我的切入点有效,但是我需要在不是入口点的模块中使用jquery。您可以在github页面上对jquery require示例的其余部分应用相同的逻辑:只需更改require语句,就可以了go@Murat-Typescript应该是abel,以便使用模块语句为您生成require语句。实际上,在某些用例中,您确实希望在运行时包含requirejs,我想知道如何设置它。这有帮助。谢谢。我认为这不起作用,因为jquery.d.ts不声明外部jquery模块:
声明模块“jquery”{}
。它只声明全局变量,至少这是有效的。希望我们可以在中更新jquery.d.ts文件以匹配。如果我尝试这样做,就会出现错误:无法解析外部模块“jquery”。并且模块不能被别名为非模块类型。听起来您在jquery.d.ts中没有声明模块“jquery”。发现问题的原因是完全不同的:我的jquery库名为“jquery-1.9.1”FacePalm for typescript 1.7+,我们还需要/
?取决于您使用的IDE。编译器必须了解jquery.d.ts。如果使用TSD,默认情况下会有一个引用所有其他类型的TSD.d.ts,然后告诉编译器repo上缺少TSD.d.tsrequire js。找不到。@emrah它在这里:
///<reference path="require.d.ts" />
///<reference path="jquery.d.ts" />
require(['jquery'], function ($) {
$(document).ready(() => {
alert('Your code executes after jQuery has been loaded.');
});
});
<script data-main="app" src="require.js"></script>
import * as $ from "jquery";
import {extend} from "jquery";
/// <reference path="../../typings/jquery/jquery.d.ts" />
import $ = require('jquery');
//Do your stuff
declare module "jquery" {
export = $;
}