Búsqueda de sitios web

angular - Cambiando el módulo a "es2015" en tsconfig.json obtengo "Token inesperado import" al ejecutar protractor


Estoy tratando de ejecutar protractor pero transpilar TypeScript usando el módulo es2015 para mi aplicación Angular 2. Esto funciona bien para la propia aplicación pero falla con protractor.

Cuando uso el módulo es2015 en mi tsconfig, obtengo el siguiente error:

(node:9096) DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead.
[15:23:36] I/direct - Using ChromeDriver directly...
[15:23:36] I/launcher - Running 1 instances of WebDriver
[15:23:40] E/launcher - Error: C:\xxx\test1.e2e.ts:1
(function (exports, require, module, __filename, __dirname) { import { browser, element, by, $ } from 'protractor';
                                                              ^^^^^^
SyntaxError: Unexpected token import
    at Object.exports.runInThisContext (vm.js:78:16)
    at Module._compile (module.js:543:28)
    at Module.m._compile (C:\xxx\ts-node\src\index.ts:406:23)
    at Module._extensions..js (module.js:580:10)
    at Object.require.extensions.(anonymous function) [as .ts] (C:\vmob-apps\purple-chicken\node_modules\ts-node\src\index.ts:409:12)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
[15:23:40] E/launcher - Process exited with error code 100

Aquí está mi tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "",
        "declaration": false,        
        "target": "es5",
        "mapRoot": "./",
        "module": "es2015",
        "moduleResolution": "node",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "sourceMap": true,
        "typeRoots": [
            "node_modules/@types"
        ],
        "types": [
            "jasmine",
            "node"
        ],
        "lib": [
            "dom",
            "es2015"
        ]
    },
    "exclude": [
        "node_modules",
        "dist",
        "**/*.ngfactory.ts",
        "**/*.shim.ts",
        "src/main*.ts"
    ],
    "awesomeTypescriptLoaderOptions": {
        "forkChecker": true,
        "useWebpackText": true
    },
    "angularCompilerOptions": {
        "genDir": ".",
        "entryModule": "src/app/app.module#AppModule"
    }    
}

Cuando lo cambias a commonjs funciona bien.

¿Hay algo que necesite agregar en mi configuración de Protractor para soportarlo? ¿O hay una forma de que pueda apuntar a un archivo tsconfig separado?

¡Gracias!

EDITAR: He descubierto cómo apuntar a un archivo tsconfig separado, puedes hacerlo a través del require de ts-node y pasar algunas opciones. ts-node es lo que realmente transpila TypeScript, fue una lucha tratar de averiguar qué hacía que se transpilará mágicamente.

require('ts-node').register({ lazy: true, project: './config/tsconfig-commonjs.json' });