2016-08-02 8 views
9

Mam 2 projekty, które działają inaczej i nie mogę powiedzieć, co jest inne. Mam następujący nad jednym projektem ...Dlaczego otrzymuję komunikat "Nieoczekiwany import tokena" w jednym projekcie z pakietem sieci Web, ale nie w innym?

// In .ts wile 
import 'core-js/es6'; 
import 'reflect-metadata'; 

ta działa świetnie na jednym projekcie, jednak kolejny projekt z tego samego tsconfig.json i typings.json oraz TS-ładowarki skonfigurowany w config WebPACK I dostać ...

Uncaught SyntaxError: Unexpected token import

The transpiled JS na zepsuty jeden wygląda tak ...

/***/ function(module, exports, __webpack_require__) { 

    /* WEBPACK VAR INJECTION */(function(process) {import 'core-js/es6'; 
    import 'reflect-metadata'; 

będę pisać projekt kolejnych jeden w kawałku

Moje pytanie brzmi: czego mi brakuje? Czy definicje maszynopisu nie są poprawnie importowane? Próbowałem już ponownie uruchomić typings install, aby to wyłączyć.

Więcej informacji

//tsconfig 
{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": true, 
    "suppressImplicitAnyIndexErrors": true 
    } 
} 

// Typings.json 
{ 
    "globalDependencies": { 
    "core-js": "registry:dt/core-js#0.0.0+20160602141332", 
    "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", 
    "node": "registry:dt/node#6.0.0+20160621231320" 
    } 
} 
+0

Więc co jest różne między dwoma projektami? Wygląda na to, że maszynopis nie jest skompilowany zanim zostanie spakowany. – Bergi

+0

Zgodziłbym się, ale kompiluje się dobrze przy pierwszym projekcie. – Jackie

+0

Czy istnieje szansa na konfigurację WebPacka? –

Odpowiedz

11

Miałem podobny problem, gdzie używałem asynchroniczny \ czekają i Promises (zarówno ES6 konstruuje) za pomocą słowa kluczowego import w plikach źródłowych ts importować moduły innych TS.

Mógłbym dokonać transpozycji za pomocą TypeScript za pomocą domyślnej wersji js target (ES5), która generuje błędy transpozycji, narzekając na słowa kluczowe async \ await i Promise, ale ponieważ faktycznie korzystam z Node 6.4.0. wszystko działa w czasie rzeczywistym.

W przypadku opisanym powyżej, słowo kluczowe „Importuj” zostało przetłumaczone z ts do js jak:

var BasePage_1 = require('./BasePage'); 

Tak, dostaję błędy TSC transpile ale Node działa dobrze w środowisku wykonawczym z powyższym „Importuj "tłumaczenie.

Jeśli użyję przełącznika -t, aby powiedzieć tsc do transpozycji do ES6, wówczas transpozycja jest czysta bez błędów, ale wtedy węzeł nie działa, ponieważ mówi, że nie rozumie słowa kluczowego "Importuj" w emitowanym pliku js.

Teraz TSC emituje następujące tłumaczenie dla „przywóz”:

import { BasePage } from './BasePage';

więc powyższe tłumaczenie naprawdę nie jest tłumaczenie w ogóle, a węzeł dławi na pliku js ze słowem kluczowym „przywóz” w środowisko wykonawcze.

Podsumowanie:

I rozwiązać tej zagadki za pomocą tego wiersza polecenia, aby powiedzieć TSC korzystania z bibliotek ES6 ale emituje odpowiednią składnię moduł importu:

myTypeScriptSourceFile.ts -t ES6 -m commonjs 

Teraz mogę dostać czystą transpile ani czas pracy błędy z węzła. Ponieważ teraz 'Import' jest poprawnie tłumaczone przy użyciu zarezerwowanego słowa 'require'.

Więcej szczegółów tutaj: https://www.typescriptlang.org/docs/handbook/compiler-options.html https://www.typescriptlang.org/docs/handbook/module-resolution.html

+1

Można to również osiągnąć, ustawiając opcje kompilatora "cel" i "moduł" w pliku tsconfig.json. – Echolot

+1

Mówiąc wprost, dodaj tę linię w pliku tsconfig '" module ":" commonjs "' –

Powiązane problemy