Ионный 2: сбой компиляции ngc (для отправки метаданных требуется, чтобы исходные файлы передавались в WriteFileCallback)

#angular #ionic-framework #ionic2 #angular-compiler-cli

#angular #ionic-framework #ionic2 #angular-compiler-cli

Вопрос:

Я пытаюсь скомпилировать свое приложение ionic 2 rc с использованием ngc с помощью typescript@next:

 [ben@ben app2] $ ./node_modules/.bin/ngc -p tsconfig.json 
Error: Metadata emit requires the sourceFiles are passed to WriteFileCallback. Update to TypeScript ^1.9.0-dev
    at MetadataWriterHost.writeFile (/home/ben/blindmate/app2/node_modules/@angular/tsc-wrapped/src/compiler_host.js:97:23)
    at Object.writeFile (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:58205:132)
    at Object.writeFile (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:8508:14)
    at printFile (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:55459:16)
    at emitFile (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:55409:21)
    at onSingleFileEmit (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:8415:13)
    at Object.forEachTransformedEmitFile (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:8392:21)
    at Object.emitFiles (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:55392:12)
    at emitWorker (/home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:58256:33)
    at /home/ben/blindmate/app2/node_modules/typescript/lib/typescript.js:58219:66
  

Я не могу изменить свою версию typescript (@next), потому что мне нужна поддержка async / await. Есть ли какой-либо способ исправить эту ошибку без установки typescript@1.9.0 как следует из сообщения об ошибке?

Мой tsconfig выглядит так:

 {


"compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [
      "dom",
      "es2015"
    ],
    "module": "es2015",
    "moduleResolution": "node",
    "target": "es5"
  },
  "exclude": [
    "node_modules",
    ".tmp",
    "src/app/main.prod.ts"
  ],
  "compileOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}
  

Ответ №1:

Я изучал то же самое, и кажется, что компилятор Angular 2 AOT, по крайней мере, версия, используемая Ionic 2 RC0, на данный момент не совсем совместим с предварительными сборками TypeScript 2.1.

Если вы вернетесь к TypeScript 2.0, который является версией, используемой Ionic 2 RC0, он будет работать. Вам придется отказаться от async / await, но на самом деле вам не нужен async / await, поскольку вы можете эффективно написать тот же код, явно создавая и используя Promises . Это просто не так кратко или выразительно. 🙂 Тем не менее, я хочу, чтобы async / await, вероятно, столько же, сколько и вы, и также был бы заинтересован в том, чтобы это заработало как можно скорее.