我已经辞职了require
中Typescript
语句中的每个Raven DB HTML5 Studio
语句都必须与您输入的文件相关,但我最近发现了一个应用程序执行此操作的方式不同而且让我感到困惑。我希望有足够技能的人可以解释这对我有用。
有问题的应用程序是新的app/viewmodels/deleteItems.ts
,它使用的是typescript,你可以在这里找到整个应用程序:
浏览源代码时,我遇到了一些有趣的东西......如果你去看看很多文件;具体来说,我正在查看的那个...... import document = require("models/document");
,它的顶部有一个参考文献......
models/document
但deleteItems.ts
不是相对于RavenDB
的路径,但此有效。有人能解释一下这是怎么回事吗?我将你与我正在谈论的确切文件联系起来。这种行为遍布整个应用程序。
app/viewmodels/deleteItem.ts
app/models/document.ts
这正是我真正想在我自己的代码中尝试和模拟的行为,因为尝试保留所有相对于我工作的文件的路径是令人头疼的,但是这个程序似乎完全没有这个要求。
这并不一定涉及typescript
,但无论如何我都在标记它,因为也许读过Raven存储库的人会理解它并且能够回答。
我试图在我自己的代码中模仿这种行为,而没有找到任何成功。我很抱歉,如果我看起来完全愚蠢,但这一切都让我很困惑。这是我的结构的样子;我的存储库是私有的,所以我不能真正链接到它。
好吧,这是我文件夹布局的一般感觉。所有/home
文件都在github
文件夹下,这样我就可以阻止import userElements = require('./UserElements');
import userMapping = require('./UserMapping');
export class UserControls {
// code
}
保存已编译的javascript并锁定它。
那么,在文件 UserControls.ts 中,它现在看起来像这样......
import userElements = require('utils/UserElements');
import userMapping = require('utils/UserMapping');
export class UserControls {
// some code
}
无论我尝试过哪种组合,这都是唯一格式/语法,它不会在Visual Studio中引发错误。但是从我在RavenDB项目中看到的情况来看,我应该能够将它声明为......
{{1}}
答案 0 :(得分:1)
遗憾的是,TypeScript编译器的模块解析算法基本上没有记录。它试图“分割AMD和CommonJS模块解析规则之间的差异”,因此有点难以推理。
你在这里看到的是试图模仿CommonJS的“走上树”决议规则。在路径C:\a\b\c\d
解析x
的路径中,首先尝试C:\a\b\c\d\x
,然后C:\a\b\c\x
,然后C:\a\b\x
,依此类推,直到它到达根文件夹并给出起来。
答案 1 :(得分:1)
无论我尝试过哪种组合,这都是唯一不会在Visual Studio中抛出错误的格式/语法。但是从我在RavenDB项目中看到的情况来看,我应该能够将它声明为......
这是因为他们使用drandalJS配置来告诉它如何解析文件路径。 (见https://github.com/ayende/ravendb/blob/New3/Raven.Studio.Html5/App/main.js)
目前TypeScript没有类似的配置(basePath
)。您最好的选择是使用您已经注意到的相对路径。
PS:一个古老但仍然相关的视频,向您展示在使用TypeScript https://www.youtube.com/watch?v=4AGQpv0MKsA&hd=1
时,requirejs配置的工作原理和相关性