Сбой сборки приложения Angular Meteor с угловыми компиляторами 0.2.5

Я использую https://github.com/Urigo/angular-meteor/tree/master/atmosphere-packages/angular-compilers для моего приложения angular-meteor. Когда я пытаюсь скомпилировать с meteor build, происходит сбой.

Команда, которую я запускаю:

meteor build /my_directory_name --directory --server-only --architecture os.linux.x86_64

И когда я запускаю пакет сервера приложений, появляется эта ошибка:

Uncaught SyntaxError: Unexpected token import

Мой проект использует:

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
msavin:mongol
jalik:ufs
jalik:ufs-gridfs
[email protected]
[email protected]
[email protected]
[email protected]
mys:fonts
[email protected]
[email protected]
astrocoders:one-signal
vsivsi:job-collection
btafel:accounts-facebook-cordova
[email protected]
[email protected]
[email protected]
percolate:synced-cron
meteorhacks:ssr
[email protected]
angular-compilers

Угловой метеор:

[email protected]
[email protected]
[email protected]
[email protected]_1

Пакет.json

{
  "name": "test",
  "private": true,
  "scripts": {
    "start": "meteor --settings settings.json"
  },
  "dependencies": {
    "@agm/core": "1.0.0-beta.1",
    "@angular/animations": "4.4.6",
    "@angular/cdk": "2.0.0-beta.12",
    "@angular/common": "4.4.6",
    "@angular/compiler": "4.4.6",
    "@angular/compiler-cli": "4.4.6",
    "@angular/core": "4.4.6",
    "@angular/flex-layout": "2.0.0-beta.9",
    "@angular/forms": "4.4.6",
    "@angular/http": "4.4.6",
    "@angular/material": "2.0.0-beta.12",
    "@angular/platform-browser": "4.4.6",
    "@angular/platform-browser-dynamic": "4.4.6",
    "@angular/platform-server": "4.4.6",
    "@angular/router": "4.4.6",
    "@ngx-translate/core": "8.0.0",
    "@ngx-translate/http-loader": "2.0.0",
    "@types/node": "8.0.47",
    "angular-meteor": "1.3.12",
    "angular2-meteor-polyfills": "0.2.0",
    "angulartics2": "3.2.0",
    "babel-runtime": "6.26.0",
    "base-64": "0.1.0",
    "bcrypt": "^1.0.3",
    "core-js": "2.5.1",
    "font-awesome": "4.7.0",
    "gm": "1.23.0",
    "google-material-color": "1.3.1",
    "hammerjs": "2.0.8",
    "jquery": "3.2.1",
    "jspdf": "1.3.5",
    "md5": "2.2.1",
    "meteor-node-stubs": "0.3.2",
    "meteor-rxjs": "0.4.8",
    "meteor-typings": "1.4.1",
    "microtime": "2.1.6",
    "ng2-page-scroll": "4.0.0-beta.12",
    "prismjs": "1.8.3",
    "qrious": "4.0.2",
    "reflect-metadata": "0.1.10",
    "rxjs": "5.5.2",
    "spawn-sync": "1.0.15",
    "thread-sleep": "2.0.0",
    "try-thread-sleep": "1.0.2",
    "ts-helpers": "1.1.2",
    "typescript": "2.5.3",
    "typescript-collections": "1.2.5",
    "zone.js": "0.8.18"
  },
  "devDependencies": {
    "@types/chai": "4.0.4",
    "@types/hammerjs": "2.0.35",
    "@types/highcharts": "5.0.9",
    "@types/jasmine": "2.6.2",
    "@types/meteor": "1.4.12",
    "@types/mocha": "2.2.44",
    "@types/prismjs": "1.6.5",
    "autoprefixer": "7.1.6",
    "awesome-typescript-loader": "3.2.3",
    "chai": "4.1.2",
    "chai-spies": "0.7.1",
    "codelyzer": "3.2.2",
    "jasmine-core": "2.8.0",
    "jasmine-spec-reporter": "4.2.1",
    "node-sass": "4.5.3",
    "protractor": "5.2.0",
    "ts-node": "3.3.0",
    "tslint": "5.8.0"
  }
}

Я ценю помощь. С Уважением!


person Leonardo Espinosa    schedule 01.11.2017    source источник


Ответы (2)


Мы только что выпустили новую версию угловых компиляторов, и новая версия компиляторов преобразует синтаксис импорта ES2015 в синтаксис CommonJS NodeJS. Этими компиляторами вам необходимо использовать модули или пакеты ecmascript, чтобы они правильно работали при обновлении вашего Meteor meteor update --all-packages. Вы можете увидеть несколько рабочих примеров в angular-meteor репозитории GitHub.

person ardatan    schedule 06.11.2017
comment
Я обновил угловые компиляторы до [email protected]_1,[email protected],[email protected],[email protected]_1, и ошибка продолжается - person Leonardo Espinosa; 09.11.2017
comment
@LeonardoEspinosa, не могли бы вы добавить небольшую репродукцию? - person Urigo; 10.11.2017
comment
@Urigo Пакет сервера приложений дает сбой, если TranslateModule включен в app.module.ts. Если удалить, работает нормально. Я создал пример в ссылке. Я пытаюсь использовать разные выпуски ngx-translate, и ошибка продолжается. - person Leonardo Espinosa; 13.11.2017
comment
Мы только что выпустили [email protected], чтобы решить эту проблему. - person Urigo; 27.11.2017

Проблема в том, что Node пока не поддерживает импорт is6 (вот вам статья, объясняющая это) и выдает ошибку Uncaught SyntaxError: Unexpected token import.

При импорте модуля ngx-translate (версия 8.0.0) в проект в комплекте сервера есть файл bundle/programs/server/packages/modules.js куда вставляется код ngx-translate следующим образом:

import { Directive, ElementRef, Input, ChangeDetectorRef } from '@angular/core';
import { equals, isDefined } from './util';
import { TranslateService } from './translate.service';

var TranslateDirective = (function () {
    function TranslateDirective(translateService, element, _ref) {
        var _this = this;
        this.translateService = translateService;
        this.element = element;
        ......
        ......

И импорт в bundle/programs/server/npm/node_modules/@ngx-translate/core/src точно такой же. Это проблема.

Для решения проблемы с ngx-translate используйте релиз 9.0.0 и проблема решена.

Но другие модули npm представляют ту же проблему Uncaught SyntaxError: Unexpected token import (модули должны создавать пакеты для commonjs, это не проблема углового метеора). Вы можете решить эту проблему с помощью babel следующим образом (например, я использую ngx-page-scroll, который представляет ту же проблему):

В вашем проекте:

  1. npm install --save babel-cli babel-preset-es2015
  2. добавить скрипт npm в package.json в области «скрипты»

"compile_ngx-page-scroll": "babel node_modules/ngx-page-scroll -d node_modules/ngx-page-scroll --presets es2015"

  1. запустите npm install для установки зависимостей
  2. запустите npm run compile_ngx-page-scroll и babel скомпилирует целевые файлы js
  3. запустите свой сервер и должен работать
person Leonardo Espinosa    schedule 24.11.2017