1

NTVS = Visual Studio 的节点工具

我创建了一个以 server.js 作为主文件的新项目。然后创建了几个类,每个类都在他们的文件中。所有这些文件都在references.ts 文件中引用。

所有文件都包含对references.ts 的引用。

但是,我的项目没有运行。它说某些类不存在。

所以我勾选了“将 Javascript 输出合并到文件中”,但 server.ts 中的代码没有附加到结果文件中(所有类都很难)。

我怎么能使用内部引用?

编辑:这是我使用的文件

服务器.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;
...

参考文献.ts

/// <reference path="Scripts/typings/node/node.d.ts" />
/// <reference path="Classes/HtmlElement.ts" />

如果编译时没有 combine 选项,这是 node.js window 的输出:

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 选项,则不会发生任何事情,因为生成的文件仅包含类声明。

4

2 回答 2

0

在“主文件”的顶部(应该是“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。

于 2014-08-15T15:57:28.027 回答
0

“将 Javascript 输出合并到文件中”选项不适用于包含导入指令的文件。

你可以更换

import http = require('http');

经过

var http = require('http');

然后 server.ts 将被合并,一切正常。

您现在可以为每个类创建一个文件并使用

var instance=new MyClass();

在我自己看来,Wich 是一种更方便的语法。

于 2014-08-18T08:26:31.873 回答