打字稿/ RequireJS与MVC应用程序有问题

时间:2014-02-04 16:55:46

标签: requirejs typescript

我在Visual Studio中的MVC应用程序中有以下代码;

/scripts/bin/models/ViewModel.ts

export class ViewModel {
  // view model code
}

现在,我已经下载了requirejs,并将typescript的构建模式设置为AMD类型,以便其输出看起来像......

define(["require", "exports"], function(require, exports) {

等等......

然后我声明我的app/config.js文件就像这样;

require.config({
    baseUrl: '/scripts/bin'
});

我尝试加载它,我将requirejs加载到脚本中,并尝试调用它...

require(['models/ViewModel'], function (viewModel) {
        console.log("test");
});

我只是被告知这是一个无效的电话。没有其他细节。它显示的路径也是完全正确的。是否需要某种额外配置? requirejs文档对此非常模糊。

原来这与requirejs无关,而是与IIS有关。

默认情况下,IIS具有称为hiddenSegments的规则。它不允许您从路径中包含bin的文件夹中引入任何代码。我只是将文件夹从bin重命名为其他内容,并且工作正常。

3 个答案:

答案 0 :(得分:1)

TypeScript编译器不了解您的require.config - 所以当您使用相对于该baseUrl的路径时,它们看起来对编译器无效。

直到做了某些事情来弥合那些轻微的不匹配(即使编译器超级聪明,以便它可以查找require.config部分并使用它们来检查路径),更容易不设置baseUrl并使用完整的导入语句中的路径:

import vm = require('./scripts/bin/models/ViewModel');

答案 1 :(得分:1)

将require.js与TypeScript一起使用是.html,require.config,模块导出和导入的组合。 有关从CommonJs TypeScript迁移到AMD和require.js的分步指南,请查看here. 玩得开心。

答案 2 :(得分:0)

您确定已通过 [] 完成要求电话,而不仅仅是

require('models/ViewModel', function (viewModel) {  // this is an error 
        console.log("test");
});

请参阅:http://requirejs.org/docs/errors.html#requireargs