2014-09-26 54 views
0

我使用Visual Studio 2013(更新3),Node.js加载v1.0.20721.02和Node.js的v0.10.31导入类工程在设计时,但在运行时不会

我试图工具把每个类放入它自己的文件中。
在设计时,一切似乎都很好,intellisense正在工作,代码编译没有问题。
但是,在运行时,节点告诉我它找不到类。

我已经在Visual Studio中创建一个新的节点控制台项目

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
throw err;

Error: Cannot find module 'SomeClass'
at Function.Module._resolveFilename (module.js:338:15)
...

Visual Studio解决方案结构

enter image description here

这是通过在Visual Studio项目模板创建一个标准的解决方案, 不应该只是工作,开箱即用?

我见过不少相关的问题,包括this one,这似乎解决了大多数人遇到的问题,但似乎并没有解决我的问题。

回答

1

尝试使用require("./SomeClass")代替:

node.js的解决require不同的时候没有前缀(see here)路径,所以在这种情况下,你需要告诉它在当前目录一看,不是一个核心模块或者在(不存在的)node_modules目录中。

为什么它没有运行之前失败的另外信息,在评论由OP给出:

Apparently VS resolves everything whether you prepend './' or not and at runtime node requires './' to be prepended.

0

运行程序再次添加以下行您的要求之前:

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

而在当前的工作目录(CWD)调整它开始你需要这样的路径。

+0

如在指定的要求(“F完整路径:\ .. \ .. \。 ..“)这似乎不起作用,也没有多大意义,它不应该是机器依赖的。 – TimothyP 2014-09-26 14:06:33

+0

不是最好的解决方案,但它暗示可能的问题。尝试使用'require(”./ SomeClass“)'。 node.js在不存在路径前缀([请参阅此处(http://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders))时以不同方式解析'require') – yerforkferchips 2014-09-26 14:11:59

+0

TimothyP,而不是机器相关的,Node解析需要通过尝试在当前工作目录的'node_modules'目录中找到它的目标,然后在它的父目录的'node_modules'中找到目标,继续到根目录。如果你想要在这个策略之外的模块,你需要指定他们的路径无论是绝对的还是相对于cwd的。 – 2014-09-26 14:32:31

相关问题