[英]How to compile a nodejs Typescript project with classes in separate files within NTVS?
NTVS = Visual Studio的節點工具
我使用server.js作為主文件創建了一個新項目。 然后創建幾個類,每個類在其文件中。 所有這些文件都在references.ts文件中引用。
所有文件都包含對references.ts的引用。
但是,我的項目無法運行。 它說某些類不存在。
因此,我勾選了“將Javascript輸出合並到文件中”,但是server.ts中的代碼未附加到生成的文件中(所有類都很嚴格)。
我如何使用內部引用?
編輯:這是我使用的文件
server.ts
/// <reference path="references.ts"/>
import http = require('http');
var html = new HtmlElement('html');
...
類/HtmlElement.ts
class HtmlElement {
tag: string;
attributes: Array<HtmlAttribute>;
childrens: Array<HtmlElement>;
parent: HtmlElement;
text: string;
...
引用
/// <reference path="Scripts/typings/node/node.d.ts" />
/// <reference path="Classes/HtmlElement.ts" />
如果不使用合並選項進行編譯,則這是node.js窗口的輸出:
debugger listening on port 5858
C:\Zdisk\Projets\14 08 - QCM\NodeJsTypeScript1\ServerApp\server.js:5
var html = new HtmlElement('html');
^
ReferenceError: HtmlElement is not defined
at Object.<anonymous (C:\Projects\NodeJsTypeScript1\Server
App\server.js:5:16)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain [as _onTimeout] (module.js:497:10)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Press any key to continue...
如果使用Combine選項,則不會發生任何事情,因為生成的文件僅包含類聲明。
在“主文件”(應該是“ server.ts”-一個TypeScript文件-而不是您提到的“ server.js”)的頂部,您應該引用“ references.ts”文件,該文件具有對您所有其他的TypeScript文件:
//
//server.ts
///<reference path='./references.ts' />
//Program Code...
在ASP.NET項目中,項目設置中有一個“ TypeScript Build”部分,您可以在其中選擇“將JavaScript輸出合並到文件中”,然后在其中放置“ server.js”。
不幸的是,看起來NTVS家伙沒有在他們自己的項目設置中添加任何類似的功能,因此您必須實施自己的預構建過程才能使其在該環境中正常工作,直到他們提供某種正式的方式來支持該功能為止。 。
或者,您可以使用BeforeBuild步驟來編譯server.js文件。 您需要手動編輯.proj文件(或.njsproj文件),並在最后一行(即項目文件中的倒數第二行)之前添加如下內容:
<Target Name="BeforeBuild">
<Exec Command="tsc.exe --module CommonJS --sourcemap --target ES5 --out server.js <ReferencedFile1> <...>" />
</Target>
其中“ ReferencedFile1”等是您嘗試包含在最終server.js文件中的文件。 您應該查看常規構建的輸出,以查看通常將哪些參數傳遞給tsc.exe。
“將Javascript輸出合並到文件中”選項不適用於包含import指令的文件。
您可以更換
import http = require('http');
通過
var http = require('http');
然后將server.ts合並,一切正常。
您現在可以為每個班級創建一個文件,並使用實例化這些文件
var instance = new MyClass();
我個人認為Wich是一種更為方便的語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.