簡體   English   中英

如何在NTVS中使用單獨文件中的類編譯nodejs Typescript項目?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM