Descobri. Vamos lá a mega charada!
O System.js tenta(ele pode falhar!) detectar qual sistema de módulos esta sendo usado e faz os ajustes necessário no seu browsers (eu não sabia disso, fiquei sabendo disso agora!).
Quando você o preset:
{
"presets" : ["es2015"]
}
Há uma transformação padrão realizada por ele que eu também não sabia que ele fazia (ele faz coisa demais, por final).
Ele gera seus módulos no formato
Object.defineProperty(exports, "__esModule", {
value: true
});
Como o arquivo transcompilado segue o padrão __esModule
, o System.js versão dev consegue interpretá-lo e carregá-lo no navegador perfeitamente.
Esta é a razão do seu código ter funcionando. Todavia, segue os seguintes alertas:
a) O System.js tentará inferir e carregar o módulo, mas é um processo que pode falhar.
When the module format is not set, automatic regular-expression-based detection is used. This module format detection is never completely accurate, but caters well for the majority use cases.
b) Transcompilar com você fez é o mais garantido, porque seu System não tentará inferir o sistema de módulos, terá certeza de que ele estará no formato System.register
.
Espero ter esclarecido essa questão.
Sucesso e bom estudo Fábio!