Как включить дополнительные источники ES6 в приложение Angular - PullRequest
0 голосов
/ 09 января 2019

У меня есть модуль пользовательского режима, написанный на синтаксисе ES6, который я включаю в мое угловое приложение, и у меня возникают проблемы (из uglifyjs), когда я пытаюсь создать приложение с включенным флагом -prod:

Unexpected token: punc ()

Это угловое приложение, использующее также angular-cli 1.7.4.

Файл ввода для моего модуля узла выглядит следующим образом:

const MyModule = require('./src/index.js');

const myModule = new MyModule();

module.exports = {
  doStuff: myModule.doStuff,
  doOtherStuff: myModule.doOtherStuff
}

Это затем становится обязательным в одном из моих файлов TS, например, так:

import MyModule = require('@acme/mymodule');

При выполнении задачи ng serve у меня нет проблем, и я могу использовать приложение, как и ожидалось.

При попытке создать производственную сборку я вижу эту проблему.

В файле ./src/index.js определено много функций, которые используют const \ let \ async \ await.

Читая, я полагаю, что это зависит от меня, используя ES6 и источники, несовместимые с uglifyjs под капотом, когда угловой cli выполняет шаги сборки.

Из того, что я также прочитал, настройкой веб-пакета можно управлять из конфигурации angular-cli, по крайней мере, не в 1.x, иначе я бы попробовал один из многих плагинов, чтобы помочь мне обойти это.

Я предполагаю, что мне нужно выполнить код через дополнительный шаг, прежде чем он достигнет angular-cli, например, использовать babel для преобразования моего кода es6.

Я изо всех сил пытаюсь найти примеры того, как это сделать по отношению к angular и cli, я могу найти, как использовать babel, и смог проверить это на одном из моих исходных текстов модуля узла и могу увидеть версию es5 этого произведено.

На самом деле у меня есть 4 узловых модуля, и некоторые из них требуют друг друга, поэтому я хочу убедиться, что они могут по-прежнему нуждаться друг в друге после транспортировки.

Кстати, не уверен, насколько это актуально, но в моем файле polyfills.ts включены следующие полифилы:

import "core-js/es5";
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';

Я ценю любые советы, которые вы можете дать!

Спасибо

UPDATE

Я создал минимальное приложение Angular 5, которое использовало 1.x angular-cli. Я повторил поведение сборки в этом, которое также генерирует ошибку из UglifyJS.

Вы можете найти приложение на моем Github здесь

Я видел, что UglifyJS, используемый в версии Webpack, используемой angular-cli, не поддерживает перенос es6.

Без миграции версий angular \ cli мне интересно узнать, есть ли способ получить примерное приложение, скомпилированное для производства и работающее без каких-либо проблем.

ОБНОВЛЕНИЕ 2

Итак, после еще нескольких экспериментов я пришел к выводу, что наиболее изящный способ обработки трансплантации ES6 при создании приложения Angular 5 - это использование ng eject для получения файла webpack.config.js и настройки uglifyjs-webpack-plugin, как описано в этой статье

Это прекрасно работает и на самом деле позволяет более точный контроль над веб-пакетом, от которого angular-cli скрывает вас изначально.

Я открыт для других предложений \ ответов, поэтому не стесняйтесь добавлять сюда!

Я все равно хотел бы найти способ использовать angular-cli, если это вообще возможно.

1 Ответ

0 голосов
/ 24 января 2019

Я вижу три варианта решения вашей проблемы:

  1. Обновите до последней версии Angular, включая cli, и пересоберите ваш проект, что должно быть просто отлично. (оптимальный вариант)
  2. Если по какой-то причине (поскольку в вашем git-репо показана только минимальная версия проекта) вы не сможете обновить. Вы можете попробовать "uglify-js": "github:mishoo/UglifyJS2#harmony" это дружественная к es6 версия UglifyJS
  3. Как вы уже обнаружили, вы всегда можете извлечь и настроить свою конфигурацию (более продвинутый вариант)
...