Import af TypeScript eksterne moduler ved hjælp af aliaser leveret gennem requirejs.config


Her er min mappestruktur:

  • app

    • app1

      • kerne.ts
      • app1
      • core.ts

    • app2

      • util.ts
    • pakker

      • funktioner

        • funktion1

          • index.ts
          • funktion1
          • index.ts

          • funktioner
          • funktion1
          • index.ts

    • app.ts (starter applikationen)
    • main.ts (hovedindgangspunkt)
  • sælger

    • requirejs (fra https://requirejs.org)
  • 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>

Bemærk i paths, jeg har også tilføjet et alias for 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;

Fra app.ts ønsker jeg at referere til core.ts, util.ts og feature1's index.ts filer. Dette er, hvordan jeg forsøgte først, og det fungerede perfekt:

/// <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);

Så prøvede jeg at gøre følgende, men fejlede. Det ser ud til, at require() kun forstår relative stier, og det forstår ikke de aliaser, der er angivet gennem 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);

Er min forståelse korrekt? Er der nogen bedste praksis for at henvise til andre eksterne moduler?

Svar #1

I din kode :

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

Dette er en compiler-fejl (requirejs er tilfreds med det). TypeScript forstår ikke requirejs.config på nuværende tidspunkt, så du skal bruge fulde relative stier.

PS: Dette vil dog blive løst snart, se https://github.com/Microsoft/TypeScript/issues/5039 for detaljer.

Relaterede artikler