导入类在设计时工作,但在运行时不工作

时间:2014-09-26 09:41:59

标签: node.js typescript

我正在使用Visual Studio 2013(更新3),Node.js Tools v1.0.20721.02和Node.js v0.10.31

我正在尝试将每个班级放入自己的档案中 在设计时,一切似乎都很好,intellisense正在工作,代码编译没有问题 然而,在运行时,节点告诉我它找不到类。

我通过在Visual Studio中创建一个新的Node控制台项目来反复重现这一点

SomeClass.ts

export class SomeClass
{
    name: string;

    constructor(name: string)
    {
        this.name = name;
    }
}

app.ts

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

import some = require("SomeClass");

var instance = new some.SomeClass("Batman");
console.log(instance.name);

生成的javascript输出如下所示:

SomeClass.js

var SomeClass = (function () {
    function SomeClass(name) {
        this.name = name;
    }
    return SomeClass;
})();
exports.SomeClass = SomeClass;
//# sourceMappingURL=SomeClass.js.map

app.js

///<reference path="Scripts/typings/node/node.d.ts"/>
var some = require("SomeClass");

var instance = new some.SomeClass("Batman");
console.log(instance.name);
//# sourceMappingURL=app.js.map

运行时输出

  

module.js:340个
     扔错了;

     

错误:无法找到模块'SomeClass'
     在Function.Module._resolveFilename(module.js:338:15)
  ...

Visual Studio解决方案结构

enter image description here

这是Visual Studio中项目模板创建的标准解决方案, 不应该只是开箱即用吗?

我见过很多相关的问题,包括this one,似乎解决了这个问题 大多数人都有的问题,但似乎没有解决我的问题。

2 个答案:

答案 0 :(得分:1)

请尝试使用require("./SomeClass")

当没有前置路径(see here)时,

node.js以不同的方式解析require,因此在这种情况下,您需要告诉它查看当前目录,而不是核心模块或内部一个(不存在的)node_modules目录。

关于运行前没有失败的原因的进一步信息,由评论中的OP给出:

  

显然,VS会解决所有问题,无论你是否加上'./',并且在运行时节点需要先添加'./'。

答案 1 :(得分:0)

再次运行程序,在需要之前添加以下行:

console.log("cwd:%s", process.cwd());

然后调整所需的路径,使其从当前工作目录(cwd)开始。