Как исключить локали момента из угловой сборки?

В моем приложении angular 5, когда я создаю сборку, используя

ng build --prod --sm

и обозреватель карт с открытым исходным кодом, момент занимает много места в файле main.js. Я обнаружил, что все локали загружаются, когда я использую

import * as moment from 'moment';

Я использовал материал-момент-адаптер для некоторых функций в приложении, для которого также требуется пакет моментов.

Я создал приложение, используя angular-cli. Я нашел много ссылок, которые исключают локали с помощью настроек в webpack.config.js. Есть ли способ исключить локали с помощью angular-cli?


person Shikha    schedule 16.04.2018    source источник
comment
Вы можете либо использовать ленивую загрузку, либо переключиться на собственный модуль для материала. Я бы рекомендовал второй вариант.   -  person    schedule 16.04.2018
comment
github.com/urish/ngx-moment   -  person Sharma Vikram    schedule 16.04.2018
comment
не могли бы вы привести пример собственного модуля материала?   -  person Shikha    schedule 16.04.2018
comment
Я использовал момент-мини. Это сработало   -  person Shikha    schedule 18.04.2018


Ответы (3)


В этой статье описывается хорошее решение: https://medium.jonasbandi.net/angular-cli-and-moment-js-a-recipe-for-disaster-and-how-to-fix-it-163a79180173

Кратко:

  1. ng add ngx-build-plus

  2. Добавьте файл webpack.extra.js в корень вашего проекта:

    const webpack = require('webpack');
    module.exports = {
        plugins: [
            new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
        ]
    }
    
  3. Бежать:

    npm run build --prod --extra-webpack-config webpack.extra.js
    

    введите код сюда

Внимание. moment.js официально объявлен устаревшим https://momentjs.com/docs/#/-project-status/ (попробуйте использовать day.js или luxon)

person Dmitriy Ivanko    schedule 28.02.2019
comment
когда я использую этот ответ, компилятор выдает эту ошибку. Произошло необработанное исключение: проект «webpack.extra.js» не существует. - person geek man; 25.07.2020
comment
и когда я меняю сборку запуска npm на сборку ng, компилятор выдает эту ошибку: Произошло необработанное исключение: не удается найти модуль '/Users/test/Desktop/projects/shb2c/webpack.extra.js' Требуется стек: - person geek man; 25.07.2020
comment
Проверьте шаг 2: ДОБАВЬТЕ/СОЗДАЙТЕ webpack.extra.js в корне вашего проекта. - person Dmitriy Ivanko; 17.08.2020
comment
moment.js устарел? - person MERN; 10.12.2020

Если вы не хотите использовать какие-либо сторонние библиотеки, самый простой способ сделать это — добавить следующее в compilerOptions вашего файла tsconfig.json.

"paths": {
  "moment": [
    "../node_modules/moment/min/moment.min.js"
  ]
}
person Zeeshan Adnan    schedule 13.03.2019
comment
Мне не удалось заставить его работать с этим решением, если используется момент-часовой пояс. - person tmorell; 13.03.2019
comment
то же самое для меня, я использую момент-часовой пояс и не могу заставить его работать - person shehata; 03.06.2019

В этой проблеме Angular есть еще одно решение: https://github.com/angular/angular-cli/issues/6137#issuecomment-387708972

Добавьте собственный путь с именем moment, чтобы он по умолчанию разрешался в нужный вам JS-файл:

"compilerOptions": {
    "paths": {
      "moment": [
        "./node_modules/moment/min/moment.min.js"
      ]
    }
}
person Daniel    schedule 29.12.2020