打字稿创建模块

时间:2016-03-08 16:06:24

标签: typescript angular

我想为我们的库创建模块,因此每次调用时,我们都可以使用import {Api, Map} from "ourlibrary"

目前我正在使用以下内容。

import {Api} from "../../Library/Api";
import {MapPage} from "../map/map";

如何创建自己的包以获得以下结果?

import {Api, Map} from "OurLib"

2 个答案:

答案 0 :(得分:2)

创建一个顶级ES6样式的js文件,将您的导入导出为单个文件,并将其命名为OurLib

exports.Api = require('../../Library/Api').Api;
exports.Map = require('.../map/map').Map;

这种方法的好处是它不会将您绑定到单个模块加载器系统。由于它是直接的ES6功能(需要/导出),它可以被SystemJS,Webpack,Typescript等使用。

如下面的评论中所述,在require语句末尾.Api.Map的原因是因为您通常从文件导入的是类。在

的情况下,你会使用这样的语法
export class Api {}

export class Map {}

在每个相应的文件中。这样,您只需分配要导出的类,而不是整个所需的文件。它使您可以更好地控制捆绑的外露模块。

答案 1 :(得分:1)

我认为有两个步骤可以做到:

  • 在SystemJS配置的map块中创建一个条目:

    System.config({
      map: {
        'OurLib': 'path-to-ourlib'
      },
      packages: {
        'OurLib': {
          main: 'index.js',
          defaultExtension: 'js'
        }
      }
    });
    
  • 创建一个TypeScript文件(例如index.ts)作为入口点模块,用于导入/导出您想在库外提供的内容:

    export {Api} from "../../Library/Api";
    export {MapPage} from "../map/map";