Javascript 使用requireJs加载脚本,使用绝对路径发布

Javascript 使用requireJs加载脚本,使用绝对路径发布,javascript,requirejs,typescript,amd,commonjs,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

我正在尝试使用基于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('api/db/models/Model');
它失败了,因为它尝试加载文件“/$APPPATH/Model.js”,而不是“/$APPPATH/api/db/models/Model.ts”

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

import model = require('./../api/db/models/Model');
Typescript显示错误并且不再编译,因为它找不到文件


那么,我怎样才能解决这个问题呢?我的解决方案是改变编译模式,不使用requireJs将文件加载到/api CommonJs中,但我不确定以后不会有其他问题,如果可能的话,我更愿意在任何地方使用相同的编译模式

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

从/api/db/models/UserModel.ts:

import model = require('api/db/models/Model');
确保Model.ts的结构类似于

class Model {
    ...
}

export = Model;

这应该在节点中运行还是什么?在浏览器中,我很确定\uuu dirname没有定义。是的,这里只定义服务器端!如果您在节点中运行,为什么不使用CommonJS加载来加载所有内容呢?i、 告诉TypeScript编译器您正在使用CommonJS-您不需要更改任何代码。您的导入x=需要'y';语句将使用节点的内置模块加载器。我知道。事实上,如果我试图在以不同模式AMD和CommonJS编译的脚本之间进行继承或依赖,我会遇到问题,因为我同时使用这两种模式,并且我需要AMD,因此我宁愿只使用一种模式来避免此类问题。您的解决方案使用CommonJS编译,路径也会失败。因为IDE使用它知道的相对于当前文件夹的路径。这不是我使用VS2012和TS 0.9.1.1的经验。我所有的require语句都遵循上述格式,并且,无论文件相对位置如何,TS编译器都会正确找到所有模块。我使用WebStorm作为IDE。我很确定这种方法行不通。