使用SystemJs引用分离的模块

时间:2016-08-28 06:55:51

标签: typescript systemjs

我有两个使用TypeScript开发的Web应用程序,它们使用一些共享代码。

例如,在.so中,我有共享代码的import语句,例如,

apps/app1/components/app1.component.ts
同样在import {ClassA} from '../../../shared/classA'; import {ClassB} from '../../../shared/classB'; 中,我有相同的import语句,即

apps/app2/components/app2.component.ts

其中import {ClassA} from '../../../shared/classA'; import {ClassB} from '../../../shared/classB'; ClassA分别位于ClassBapps/shared/ClassA

目前,要在浏览器中加载这些共享模块,我必须使用以下map和packages语句更新apps/shared/ClassBapps/app1/systemjs.config.js

apps/app2/systemjs.config.js

如果我只有两个类(map: { 'classA': 'apps/shared', 'classB': 'apps/shared }, packages: { 'classA': {main: 'classA', defaultExtension: 'js'}, 'classB': {main: 'classB', defaultExtension: 'js'} } classA),这很好,但随着classB中类的数量增加,开始变得更难维护。有什么办法可以告诉systemJs在一个语句中加载apps/shared中的所有模块吗?像

这样的东西
apps/shared

同时保持我的TypeScript源中使用的相对模块分辨率(即上面的import语句)?

1 个答案:

答案 0 :(得分:0)

解决问题的一种方法是在独立模块中安排共享代码,例如用于node.js的代码:

  1. 为您的库创建根文件夹
  2. 在根文件夹中创建index.ts文件,您将在其中公开所有必需的类(example
  3. 在systemjs配置中仅映射index.ts
  4. index.ts看起来像这样:

    export * from './lib/ClassA';
    export * from './lib/ClassB';
    

    如果需要,您也可以通过这种方式公开共享类的嵌套结构,如post

    中所述

    是的,您必须至少保留一个index.ts个额外文件。但另一方面,你需要只在那里进行一次“映射”,只需要一次。

    希望这对你有任何帮助。