Hvordan få SystemJS til å transpile 'typescript' basert på filendelse, ikke innhold


Jeg har denne SystemJS-konfigurasjonen i index.html:

<body>
        <script src="node_modules/systemjs/dist/system.js"></script>
        <script>
            System.config({
                defaultJSExtensions: true,
                transpiler: 'typescript',
                map: {
                    typescript: 'node_modules/typescript/lib/typescript.js'
                },
                packages: {
                    "ts": {
                        "defaultExtension": "ts"
                    }
                },
            });
            System.import('ts/main');

        </script>
</body>

main.ts:

let a = [1, 2, 3];
let b = [1, 2, 3];

Jeg får: Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode. Det ser ut som filen ikke er transpiletert av SystemJS.

Når jeg legger til import-setningen på første linje, fungerer det perfekt:

import * as ts from 'typescript'; // or any other package

let a = [1, 2, 3];
let b = [1, 2, 3];

Det ser ut til at SystemJS gjenkjenner TypeScript-filer etter «innhold» - er dette korrekt? Hvis ja, hvordan tvinge det til å transpile hver .ts eller src/-fil?

Svar #1

Som du mistenkte, gjetter systemjs hvilken syntaks du bruker i filen din. Du kan hjelpe systemjs ved å legge til

// maybe you need to use " format:'register' " instead
System.config({
  meta: {
    '*.ts': {
      format: 'es6'
    }
  }
});

mer info modul-formater

Svar #2

Jeg skrev en modul for å hjelpe med håndtering av flere filutvidelser med SystemJS: https://www.npmjs.com/package/one-plugin

Relaterte artikler