我在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
重命名为其他内容,并且工作正常。
答案 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");
});