導入之前,我學會了如何打字稿模塊的工作一點點,如果我想用一個js庫如jQuery我只想補充一個script
標籤引用該庫,但現在,我使用的打字稿,我經常發現這樣的例子:如何正確添加的.js庫,以我的應用程序,這樣我可以在打字稿模塊
import * as $ from 'jquery'
但jQuery是不是打字稿模塊,它是如何工作的呢?我應該如何將外部非打字稿庫添加到我的模塊中?
編輯#1
tsconfig.json
明確告訴打字稿使用AMD格式(我選擇了commonjs
這一個,因爲我讀了自從AMD負載模塊異步,它是更適合於Web應用程序)
{
"compilerOptions": {
"sourceMap": false,
"target": "es5",
"module": "amd",
"outDir": "Scripts"
},
"exclude": [
"node_modules",
"wwwroot"
]
}
要安裝我用的類型定義分型
typings install dt~jquery --global --save
提過什麼,我實際使用,我不明白的是RequireJs如何能夠找到第三方庫的時候,我只指定要加載的文件(在這種情況下, app.js)後require.js
負載
<script data-main="Scripts/app/app" src="Scripts/require.js"></script>
我嘗試過和require.js
script標籤後加入爲jquery.js
文件的腳本標籤,但沒有奏效。所以,我怎麼想告訴require.js
「看起來我需要這個X文件中去,並加載它爲我」?
我問這是因爲,如果我理解正確的類型定義的目的,他們的存在只是爲了給我們類型檢查,僅此而已,我們還需要添加我們要用實際的庫。
編輯#2
那麼,到底這是我落得這樣做:
I)根據http://requirejs.org/docs/api.html#data-main此頁面,data-main
僅供使用時的頁面只是有一個主入口點,當你需要其他的js文件,所以下面的配置應該使用它將會失敗:
<script src="~/Scripts/require.js"></script>
<script>
require.config({
paths: {
"lodash": "Scripts/lodash"
}
});
require(["Scripts/app/js/app"]);
</script>
這裏我EXPL icitly告訴require.js在哪裏可以找到爲我想用,在這種情況下lodash.js
庫的源代碼。只有當所有的路徑映射完成,我需要指示要加載app.js
II)app.ts
/// <reference path="../../typings/index.d.ts" />
import * as _ from "lodash";
console.log('Using Lodash: ' + _.snakeCase("For Whom the Bells Toll");
對於類型定義的正常工作,你必須包括reference
標籤
就是這樣。
爲了測試是否一切工作,我必須使用是檢查控制檯,看到一切正常:
一兩件事,還不是很清楚,我是所有的幕後魔法的作品,但看看爲app.js生成的js代碼,我想第三個依賴「lodash」在require.config
define(["require", "exports", "lodash"], function (require, exports, _) {
"use strict";
console.log('Using Lodash: ' + _.snakeCase("For Whom the Bells Toll"));
});
哦,還有最後一件事,如果你不希望有在您的TS文件reference
標籤,當您需要使用d.ts
文件,你可以在路徑中tsconfig.json
文件添加到您的index.d.ts
像這樣:
{
"compilerOptions": {
"sourceMap": false,
"target": "es5",
"module": "amd",
"outDir": "js"
},
"include": [
"src/**/*.ts",
"../typings/index.d.ts"
]
}
謝謝您花時間回答我的問題。我不確定我是否理解你,所以我在我的問題中增加了一些細節。請看一下。 – eddy
已更新,以幫助AMD。 –