Не удалось получить сгенерированное jhipster (6.3.1) приложение, работающее на IE11 - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь запустить сгенерированное JHipster 6.3.1 приложение в IE 11, но продолжаю получать одну ошибку за другой. В зависимости от того, какой импорт я использую в polyfill.ts, я получаю что-нибудь из «Symbol» от undefined »до простой« Синтаксической ошибки », а иногда и без какой-либо конкретной ошибки, просто страница с общим JHipster

Произошла ошибка: - (

Я пробовал разные комбинации настроек polyfills и tsconfig.json. Я установил рекомендуемые polyfills согласно угловым 8 документам, но этоКажется, что jhipsters angular != standard angular, поскольку вся чистая angular 8 документация, касающаяся IE11, была бесполезна.

Я знаю, IE 11 больше не поддерживается JHipster, но, поскольку Angular имеет конкретные инструкции по использованию polyfillsи дифференциальная нагрузка, чтобы заставить его работать, я ожидал (предположил), что это будет довольно прямолинейное исправление.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Как я уже сказал здесь , мне удалось сделать это следующим образом.

Сначала добавьте эти package.json зависимости: @babel/core, @babel/preset-env и babel-loader:

yarn add @babel/core @babel/preset-env babel-loader --exact --dev

(протестировано со следующими версиями:

    "@babel/core": "7.6.4",
    "@babel/preset-env": "7.6.3",
    "babel-loader": "8.0.6",

)

Теперь добавьте следующие строки вверху src/main/webapp/app/polyfills.ts:

import 'core-js/stable';
import 'regenerator-runtime/runtime';

В webpack/webpack.common.js, после

            {
                test: /manifest.webapp$/,
                loader: 'file-loader',
                options: {
                    name: 'manifest.webapp'
                }
            },

добавить следующие строки:

            {
                test: /\.js/,
                use: {
                  loader: 'babel-loader',
                  options: {
                    "presets": [
                      [
                        "@babel/preset-env",
                        {
                          "targets": {
                            "firefox": "60",
                            "ie": "11"
                          },
                          "useBuiltIns": "entry",
                          "corejs": 3
                        }
                      ]
                    ]
                  }
                },
                exclude: /@babel(?:\/|\\{1,2})runtime|core-js/,
              },

И, наконец, изменить target на es5 в tsconfig.json & tsconfig-aot.json.

Вот мой полный тест:

sudo rm -rf /dev/shm/myproject
cd /dev/shm/
mkdir myproject
cd myproject
mkdir /dev/shm/m2cache /dev/shm/yarncache
sudo tee myproject.jdl <<EOF
application {
    config {
        baseName MyProject
        clientPackageManager yarn
        jhiPrefix mp
        enableTranslation false
        languages [fr]
        nativeLanguage fr
        packageName com.mycompany.myproject
        prodDatabaseType postgresql
        skipUserManagement true
    }
    entities *
}

entity MyEntity {
    label String
}
EOF
JHIPSTER_VERSION=v6.3.1
sudo chown -R 1000:1000 . /dev/shm/m2cache /dev/shm/yarncache
docker run -it --rm --name jhipster -v "$(pwd):/home/jhipster/app" -v /dev/shm/m2cache:/home/jhipster/.m2 -v /dev/shm/yarncache:/home/jhipster/.cache/yarn -v "$HOME/.gitconfig:/home/jhipster/.gitconfig:ro" jhipster/jhipster:$JHIPSTER_VERSION jhipster import-jdl ./myproject.jdl --force

# WAIT FOR THE APPLICATION TO BE GENERATED

docker run -it --rm --name jhipster -v "$(pwd):/home/jhipster/app" -v /dev/shm/m2cache:/home/jhipster/.m2 -v /dev/shm/yarncache:/home/jhipster/.cache/yarn -p 9000:9000 -p 8080:8080 jhipster/jhipster:$JHIPSTER_VERSION yarn add @babel/core @babel/preset-env babel-loader --exact --dev

# WAIT FOR THE YARN COMMAND TO END

echo "
import 'core-js/stable';
import 'regenerator-runtime/runtime';

$(cat src/main/webapp/app/polyfills.ts)
" | sudo -u '#1000' tee src/main/webapp/app/polyfills.ts

cat > /dev/shm/webpack.patch <<EOF
            {
                test: /\.js/,
                use: {
                  loader: 'babel-loader',
                  options: {
                    "presets": [
                      [
                        "@babel/preset-env",
                        {
                          "targets": {
                            "firefox": "60",
                            "ie": "11"
                          },
                          "useBuiltIns": "entry",
                          "corejs": 3
                        }
                      ]
                    ]
                  }
                },
                exclude: /@babel(?:\/|\\{1,2})runtime|core-js/,
            },
EOF
sudo -u '#1000' sed -i $'/Ignore warnings about System.import in Angular/{e cat /dev/shm/webpack.patch\n}' webpack/webpack.common.js

for FILE in tsconfig.json tsconfig-aot.json; do
  sudo -u '#1000' sed -i 's/"target": "es6"/"target": "es5"/' $FILE
done

docker run -it --rm --name jhipster -v "$(pwd):/home/jhipster/app" -v /dev/shm/m2cache:/home/jhipster/.m2 -v /dev/shm/yarncache:/home/jhipster/.cache/yarn -p 9000:9000 -p 8080:8080 jhipster/jhipster:$JHIPSTER_VERSION bash -c "./mvnw & yarn start --host 0.0.0.0"

Спасибо https://www.thebasement.be/working-with-babel-7-and-webpack/, https://babeljs.io/docs/en/usage и https://github.com/zloirock/core-js/issues/514#issuecomment-523524472 за подсказки!

0 голосов
/ 03 октября 2019

Мне удалось заставить его работать. Я сгенерировал приложение Angular с помощью ng CLI из более старого Angular. Я сравнил tsconfig.json, package.json и polyfills.ts и использовал «старые» настройки для сгенерированного JHipster. Это дало мне следующие изменения:

Пониженные версии в package.json для:

  • core-js с 3.1.3 до ^2.4.1
  • zone-jsот 0.9.1 до ^0.7.2

В tsfconfig.json:

    "target": "es5",
    "module": "es6",

и

    "lib": ["es6", "dom"],

и, наконец, polyfills.ts

    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/set';
    import 'core-js/es6/reflect';
    import 'core-js/es7/reflect';
    import 'core-js/es7/array';
    import 'core-js/es7/object';
    import 'zone.js/dist/zone.js';
    require('../manifest.webapp');

Эти изменения дают мне работающее приложение в IE11, но только с prod сборкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...