使用requireJs加载脚本,使用绝对路径发出问题

时间:2014-02-02 01:47:39

标签: javascript requirejs typescript amd commonjs

我正在尝试使用requireJs()函数加载脚本,基于requirejs。

这是我的app.js:

// Other stuff...
__config.path.base = __dirname + '/../';
requireJs = require('requirejs'),// To use to require AMD typescript files.
requireJs.config({
    baseUrl: __config.path.base,
    nodeRequire: require
});

但是我遇到了一个问题......这个脚本实际上不是app.js,它是/config/boostrap.js,现在,如果我要导入文件/api/db/models/UserModel.ts中的文件,路径是实际上是'/$APPPATH/'而不是'/$APPPATH/api/db/models/'

所以,当我尝试导入时,来自/api/db/models/UserModel.ts

import model = require('./Model');

失败,因为它尝试加载文件'/$APPPATH/Model.js'而不是'/$APPPATH/api/db/models/Model.ts'

如果我尝试以不同的方式导入:

import model = require('./../api/db/models/Model');

Typescript显示错误,不再编译,因为它找不到文件。

那么,我该如何解决这个问题呢?我的解决方案是改变编译模式,不要使用requireJs将文件加载到/ api(CommonJs),但是我不确定以后会不会遇到其他问题,我宁愿在任何地方使用相同的编译模式这是可能的!

1 个答案:

答案 0 :(得分:0)

Typescript的import语句(使用requireJS)将始终使用应用程序根路径作为起点,编译器也是如此。

来自/api/db/models/UserModel.ts:

import model = require('api/db/models/Model');

确保Model.ts的结构类似于......

class Model {
    ...
}

export = Model;