这是我的文件夹结构:
的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.ts
,util.ts
和feature1'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);
我的理解是否正确?引用其他外部模块的最佳做法是什么?
答案 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。