2014-09-26 53 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

相關問題