Сбой сборки Angular для продакшена

Когда я пытаюсь собрать для производства свое приложение angular с помощью следующей команды ng build --prod --build-optimizer, я получаю следующий результат:

Date: 2019-01-29T08:39:12.193Z
Hash: 05648c76cf91b1245f68
Time: 27920ms
chunk {0} runtime.1eee2a92f0ed121267d0.js (runtime) 2.22 kB [entry] [rendered]
chunk {1} 1.71c6b320e46d84e7f880.js () 88.8 kB  [rendered]
chunk {2} main.058aa675d38205a01c2e.js (main) 1.65 MB [initial] [rendered]
chunk {3} polyfills.6226af78bf8dfb509e3e.js (polyfills) 61.7 kB [initial] [rendered]
chunk {4} styles.dec6a5db702d518085c9.css (styles) 61.2 kB [initial] [rendered]
chunk {5} 5.639dab8d0d9c763ecce1.js () 639 kB  [rendered]
chunk {6} 6.eeb0ec1b5f6ee2bc4225.js () 130 kB  [rendered]

ERROR in 5.639dab8d0d9c763ecce1.js from Terser
--> Unexpected token: punc ()) [5.639dab8d0d9c763ecce1.js:4086,34] <--
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] build_prod: `ng build --prod --build-optimizer`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] build_prod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Сборка для разработки и обслуживания приложения работает нормально, поэтому я подозреваю, что это может быть связано с процессом uglify. Конфигурация angular json для производства выглядит следующим образом:

"production": {
  "fileReplacements": [
    {
      "replace": "src/environments/environment.ts",
      "with": "src/environments/environment.prod.ts"
    }
  ],
  "optimization": true,
  "outputHashing": "all",
  "sourceMap": false,
  "extractCss": true,
  "namedChunks": false,
  "aot": true,
  "extractLicenses": true,
  "vendorChunk": false,
  "buildOptimizer": true
},

а угловая версия и пакеты:

Angular CLI: 7.2.3
Node: 11.1.0
OS: win32 x64
Angular: 7.2.0
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.12.1
@angular-devkit/build-angular     0.12.1
@angular-devkit/build-optimizer   0.12.1
@angular-devkit/build-webpack     0.12.1
@angular-devkit/core              7.2.1
@angular-devkit/schematics        7.2.3
@angular/cdk                      7.2.1
@angular/cli                      7.2.3
@angular/flex-layout              7.0.0-beta.23
@angular/material                 7.2.1
@ngtools/webpack                  7.2.1
@schematics/angular               7.2.3
@schematics/update                0.12.3
rxjs                              6.3.3
typescript                        3.2.2
webpack                           4.23.1

наконец, файл tsconfig.json имеет следующее содержимое:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@app/*": ["src/app/*"],
      "@env/*": ["src/environments/*"]
    },
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}

Если я изменю параметр "SourceMap" angular.json с false на true и попытаюсь выполнить производственную сборку, которую он строит, без каких-либо ошибок:

Date: 2019-01-29T08:47:50.705Z
Hash: 369c42b07abe57a96302
Time: 42331ms
chunk {0} runtime.90bf2a53d53699d5ef63.js, runtime.90bf2a53d53699d5ef63.js.map (runtime) 2.28 kB [entry] [rendered]
chunk {1} 1.9ac663afcd9a15f9ad98.js, 1.9ac663afcd9a15f9ad98.js.map () 88.9 kB  [rendered]
chunk {2} main.e3c4184e7cbc49903adc.js, main.e3c4184e7cbc49903adc.js.map (main) 1.65 MB [initial] [rendered]
chunk {3} polyfills.6c3e7ecffd41b4bb0d68.js, polyfills.6c3e7ecffd41b4bb0d68.js.map (polyfills) 61.7 kB [initial] [rendered]
chunk {4} styles.cb7c8ca5b54a30c69879.css, styles.cb7c8ca5b54a30c69879.css.map (styles) 61.2 kB [initial] [rendered]
chunk {5} 5.72034e2cb610bc9b5476.js, 5.72034e2cb610bc9b5476.js.map () 251 kB  [rendered]
chunk {6} 6.45111c2fd642148bbdd3.js, 6.45111c2fd642148bbdd3.js.map () 131 kB  [rendered]

Process finished with exit code 0

Любое предложение?

РЕДАКТИРОВАТЬ:
при запуске ng build --prod --optimization=false компилируется отлично


person Dexter    schedule 29.01.2019    source источник
comment
Вы уже достигли в этом прогресса? Я думаю, что наблюдаю ту же проблему.   -  person Mathias    schedule 03.02.2019
comment
Собственно, я нашел 2 возможных решения: первое - установить флаг --optimization в значение false. Другой - изменить файл angular.json, чтобы установить для параметра sourceMap значение true. Я использую второй, так как он оптимизирует вывод. Совсем не окончательные решения, но они делают свою работу.   -  person Dexter    schedule 04.02.2019
comment
В нашем случае проблема заключалась в конечной коме в файле .js в проекте Angular. Но как мы его нашли? Мы нашли решение здесь, в Stack Overflow stackoverflow.com/questions/54380816/   -  person Anton Mitsev    schedule 18.04.2019
comment
Это было отлично! проблема заключалась в том, что замыкающая кома не в моем коде, а в библиотеке node_modules, которую я использовал. Удаление устраняет поломку   -  person Dexter    schedule 18.04.2019


Ответы (1)


Как заявил Антон Мицев, проблема заключалась в конечной коме. При удалении трейлинга ошибка исчезает.

person Dexter    schedule 18.04.2019
comment
Однако при такой же проблеме конечная запятая принадлежит сторонней библиотеке, и у меня нет к ней доступа. Любое другое решение этой проблемы? Не использовать флаг оптимизации - это не вариант, может быть, каким-то образом не оптимизировать один конкретный node_module? - person Matias Fernandez Martinez; 13.08.2019
comment
Почему бы вам не удалить его из исходного кода внутри npm_modules в качестве временного исправления? - person Dexter; 13.08.2019
comment
Это не будет работать в среде непрерывной интеграции, мне нужны реальные зависимости, я получаю от них обновления, а также имею оптимизированную сборку - person Matias Fernandez Martinez; 13.08.2019
comment
Тогда я думаю, что единственное решение - создать проблему с запросом совместимости. - person Dexter; 13.08.2019