使用requirejs.config提供的别名导入TypeScript外部模块

时间:2015-10-27 11:23:40

标签: requirejs typescript

这是我的文件夹结构:

  • 应用
    • APP1
      • core.ts
    • APP2
      • util.ts
      • 特征
        • 特征1
          • index.ts
    • app.ts(引导应用程序)
    • main.ts(主要入口点)
  • 供应商
  • 的index.html

的index.html

<!DOCTYPE html>
<html>
  <head>
    <title>Test RequireJS with TypeScript</title>
    <script src="vendor/requirejs/require.js" data-main="app/main"></script>
  </head>
 <body>


 </body>

请注意paths,我已为feature1添加了别名。
main.ts

'use strict';

require.config({
  paths: {
    app1: 'app1',
    app2: 'app2',
    feature1: 'packages/features/feature1'
  },
  deps: ['app']
});

core.ts(app1)

class Core {
  name = 'Core';
}

export = Core;

util.ts(app2)

class Util {
  name = 'Util';
}

export = Util;

index.ts(feature1)

class Util {
  name = 'Util';
}

export = Util;

app.ts开始,我想推荐core.tsutil.tsfeature1's index.ts个文件。这就是我首先尝试并完美地工作的方式:

/// <amd-dependency path="feature1/index" name="Feature" />
declare var Feature: any;

import Core = require('app1/core');
import MyUtil = require('app2/util/myutil');

var c = new Core();
console.log(c.name);

var util = new MyUtil();
console.log(util.name);

var f = new Feature();
console.log(f.name);

然后我尝试了以下操作但失败了。好像require()只能理解相对路径而且它不理解通过require.config(...)提供的别名:

import Core = require('app1/core');
import MyUtil = require('app2/util/myutil');
import Feature = require('feature1/index'); // ERROR!: Cannot find module `feature1/index`

var c = new Core();
console.log(c.name);

var util = new MyUtil();
console.log(util.name);

var f = new Feature();
console.log(f.name);

我的理解是否正确?引用其他外部模块的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

在您的代码中:

import Feature = require('feature1/index'); // ERROR!: Cannot find module `feature1/index`

这是一个编译器错误(requirejs很满意)。 TypeScript 目前无法理解requirejs.config,因此您必须使用完整相对路径

PS:这将很快得到解决,详见https://github.com/Microsoft/TypeScript/issues/5039

相关问题