<p>момент с языками: "./locale" не найдено</p>

Созданный на 22 февр. 2016  ·  48Комментарии  ·  Источник: moment/moment

Я получаю это предупреждение при использовании webpack:

WARNING in ./~/moment/min/moment-with-locales.js
Module not found: Error: Cannot resolve 'file' or 'directory' ./locale in \node_modules\moment\min
@ ./~/moment/min/moment-with-locales.js 271:16-43

какие-нибудь подсказки?

Discussion Documentation Help Wanted

Самый полезный комментарий

Я использовал модуль игнорирования с хорошими результатами. Это может кому-то помочь:

    // /app/js/webpack.config.js
    plugins: [

        // Fixes warning in moment-with-locales.min.js 
        //   Module not found: Error: Can't resolve './locale' in ...
        new webpack.IgnorePlugin(/\.\/locale$/)
    ]

Все 48 Комментарий

См. №1435. Временное решение в конце. Благодарю.

предлагаемый обходной путь в "плагинах" webpack.config.js

new webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(en|de|cz|eu)$/)

не работало

Упомянутая выше проблема связана с оператором require('./locale' + name) включенным в файл min / moment-with-locales.js. В этом больше нет необходимости, потому что все локали уже включены в сам этот файл.

К сожалению, webpack пытается разрешить все операторы require - поэтому это предупреждение.

@ichernev - я не использую webpack, но, похоже, мысль, которую делает

Самое простое решение, как убедить webpack не искать локали, уже включенные в moment-with-locales.js, - это заставить его загрузить что-то другое. Это сработало для меня:

установить пустой модуль (он ничего не содержит)
npm install --save-dev empty-module
а затем настройте ContextReplacementPlugin следующим образом
new webpack.ContextReplacementPlugin(/\.\/locale$/, 'empty-module', false, /js$/)

Надеюсь, это поможет.

Спасибо за обходной путь @mheimschild - было бы неплохо, если бы это было решено уже в Webpack 2, даже если бы пустой модуль автоматически включался бы как зависимость разработчика.

Кажется, нет необходимости использовать empty-module , просто измените его на null, он все еще работает в ContextReplacementPlugin

new webpack.ContextReplacementPlugin(/\.\/locale$/, null, false, /js$/)

просто была аналогичная проблема при использовании momentjs через npm
Я обнаружил, что в locales.js это относится к ./locale/
Я предполагаю, что эта строка пытается найти языковую локализацию. CMIIW

Между тем файлы локали расположены на ../../locale/ от locale.js
изменив эту строку на require ('../../locale/' + name); я решил проблему, но не смог отредактировать node_modules прямо на моем сервере

позже попробую описанный выше способ webpack

РЕДАКТИРОВАТЬ: Я запускал это в Windows, похоже, проблема с путём. Я пробовал запустить момент на Linux, и он работает нормально

Я использовал модуль игнорирования с хорошими результатами. Это может кому-то помочь:

    // /app/js/webpack.config.js
    plugins: [

        // Fixes warning in moment-with-locales.min.js 
        //   Module not found: Error: Can't resolve './locale' in ...
        new webpack.IgnorePlugin(/\.\/locale$/)
    ]

@miguelrincon отлично работает!

Потрясающе. Оно работает!

@miguelrincon или аналогичный - можем ли мы получить для этого запрос на включение документации? Это будет в разделе использования в webpack.

Как исправить в гибридных приложениях Ionic 3.5 с Angular 4, где у нас нет файла webpack.config?

Я попробовал предложение @miguelrincon выше, но оно не сработало.
т.е. он не вызывает ошибку во время сборки, но та же ошибка выдается в журнале консоли браузера.

Осмотревшись, я нашел это, и он отлично работает!

https://github.com/afc163/react-boilerplate/commit/61ec8a19df0fcb56d407b795cb6c87141e0e14a7

\\ webpack.js

resolve: {
   ....
   alias: {
      moment$: 'moment/moment.js',
   },
   ...
}

Эта проблема появилась у меня в moment.js 2.19.0. Если вам нужно заставить ваше приложение работать прямо сейчас, откат должен сделать это. Например:

npm install [email protected] --save

Спасибо @ jeff3dx Это

@ jeff3dx У меня было точно то же самое с последней версией, но добавление псевдонима разрешения, предложенного @ M1chaelTran, по- прежнему помогает.

Я подтверждаю, что переход на версию 2.18 сразу решает проблему.

Тоже самое. Используя React 16, установил момент 2.19 и получил ошибки. Вернулся на 2.18, ошибок нет.

уважаемый, я решаю это!
src / lib / locale / locales.js в строке 61,
61 требуется ('./ locale /' + имя);
изменить на:
61 требуется ('./' + имя);
"момент с locales:" ./locale "not found" будет решен.

@ wushuang5112 вы не можете редактировать node_module, поэтому вашему решению потребуется добавить момент в репозиторий, что не очень хорошо

У нас также возникла проблема при обновлении до версии 2.19 в приложении, также использующем реакцию и веб-пакет. Возврат к 2.18 исправил это.

Вместо того, чтобы просто откатиться назад, я бы использовал решение @ M1chaelTran по использованию псевдонима для momentjs внутри конфигурации webpack. Работал как шарм и позволяет мне продолжать использовать последнюю версию.

решено! ... v2.19.1

@ M1chaelTran, чувак, ты благословение, большое тебе спасибо !!!

Я все еще вижу проблему в версии 2.19.1

WARNING in ./~/moment/src/lib/locale/locales.js
Module not found: Error: Can't resolve './locale' in '/project/node_modules/moment/src/lib/locale'
 @ ./~/moment/src/lib/locale/locales.js 56:12-46
 @ ./~/moment/src/lib/locale/locale.js
 @ ./~/moment/src/moment.js
 @ dll reactBoilerplateDeps

Однако трюк с псевдонимом

@electrobabe Я думаю, проблема в том ... что документ по этому поводу устарел. так...

Чтобы решить эту проблему: Can't resolve './locale' in , попробуйте импортировать moment и min/locales вместо moment-with-locales . Это закреплено за мной!

Лучшая ссылка для этого:
http://momentjs.com/docs/#/i18n/loading -into-browser /

Переход на версию 2.18 не решает проблему. По-прежнему есть это: Ошибка: не удается найти модуль "./locale"

Странно то, что это исправить:

  • в моем проекте react-native мне нужно импортировать файл moment-with-locales
  • в моем проекте reactjs мне просто нужно импортировать файл moment/locales

@manelephant Я думаю, это решит проблему: https://github.com/moment/moment/issues/2979#issuecomment -346636284

Переход на версию 2.18 не решает проблему.

Я использую angular cli.
момент сработал, но когда я хочу экспортировать свой компонент с помощью npm run packagr ==>

Компиляция в FESM15
'locale' не экспортируется 'node_modulesmoment \ srcmoment.js'

СТРОИТЕЛЬНАЯ ОШИБКА
Невозможно вызвать пространство имен ("момент")
Ошибка: невозможно вызвать пространство имен ("момент")

кто-нибудь может мне помочь?

Похоже, в этой ветке много полезных советов. Нам бы очень хотелось порекомендовать нашу документацию по этому поводу! https://github.com/moment/momentjs.com

Спасибо за всю информацию.

ОБНОВЛЕНИЕ: я нашел решение.

Правильный способ импорта:

import * as moment_ from 'moment'; const moment = moment_;

и в ng-package.json:

{ "lib": { "externals": { "moment": "moment" } } }

На мой взгляд, структура была ложной, внешних элементов не было внутри библиотеки, поэтому packgr искал lib.externals и не мог найти момент.

Ng-packgr и момент

Пользуюсь последней версией, щас

Пока я пытаюсь использовать ng-packagr и упаковать свой проект, я получаю эту ошибку. То же, что: @vZanchiV

'locale' не экспортируется 'node_modulesmoment \ srcmoment.js'

СТРОИТЕЛЬНАЯ ОШИБКА
Невозможно вызвать пространство имен ("момент")
Ошибка: невозможно вызвать пространство имен ("момент")

В проекте это импортер таким образом:

импорт * как момент с момента;

Я нашел обходной путь, который не удался, я попытался импортировать его, например:

import * как momentImported from 'moment';

После этого метода я мог экспортировать свой проект с помощью ng-packagr, но затем мне не удалось импортировать свой проект в другой проект с этой проблемой

Модуль не найден: ошибка: не удается разрешить './locale' в 'C: \ development \ angularTest \ angulartestnode_modules \ имя модуля

Чтобы подтвердить решение @ francisrod01 , я изменил свой импорт, так что вместо

import moment from 'moment/min/moment-with-locales'

Я изменился на

import moment from 'moment'
import 'moment/min/locales'

И это решило для меня. Надеюсь, поможет.

Я обнаружил, что решение для псевдонима, опубликованное выше @ M1chaelTran, работает хорошо. Если кто-то, использующий Laravel Mix, задается вопросом, как его применить, ваш webpack.mix.js должен выглядеть примерно так, как показано наверху:

let mix = require('laravel-mix');

mix.webpackConfig({
    resolve: {
        alias: {
            moment$: 'moment/moment.js'
        }
    }
});

попробуйте все вышеперечисленные решения, может разрешиться только «версия с моментом понижения», но для некоторых из моих модулей, таких как «antd», требуется 2.19.0. поэтому я думаю, что не могу понизить его

        new webpack.ContextReplacementPlugin(/^\.\/locale$/, (context) => {
            if (!/\/moment\//.test(context.context)) return;

            Object.assign(context, {
                regExp: /^\.\/\w+/,
                request: '../../locale', // resolved relatively
            });
        }),

Это решение сработало для меня.

Похоже, это та же проблема, что и # 4216 (и # 3872 для загрузки).

Вероятно, лучше всего обратиться к # 4216, так как у него самая большая история

@aaronkrohn спасибо, это решение работает с

Попробуйте сначала загрузить локаль, а не moment.min.js.

"момент": [
"../node_modules/moment/locale/en-au.js",
"../node_modules/moment/min/moment.min.js"
]

это решит мою проблему.

У меня есть момент 2.24.0 и это наконец сработало для меня:

    // Fixes warning in moment-with-locales.min.js
    //   Module not found: Error: Can't resolve './locale' in ..
    new webpack.ContextReplacementPlugin(/^\.\/locale$/, context => {
      if (!/\/moment\//.test(context.context)) return

      Object.assign(context, {
        regExp: /^\.\/\w+/,
        request: '../locale', // resolved relatively
      })
    })

Практически то же самое, что и исправление @aaronkrohn , но вместо request: '../../locale', пришлось использовать request: '../locale', .

Вот исправление этой проблемы:

Файл: "moment \ src \ liblocalelocales.js", строка 56:
"./locale" необходимо заменить на "../../locale"

Александра

Исправить просто ...

найди что-нибудь вроде этого:

import moment from 'moment/src/moment';

и замените его этим

import * as moment from 'moment';

С помощью приложения create-response-app импорт ниже работал у меня нормально

import * as moment from "moment/moment.js"

С помощью приложения create-response-app импорт ниже работал у меня нормально

import * as moment from "moment/moment.js"

Решение @mssui сработало для меня

 "resolutions": {
    "moment": "2.24.0"
  }

добавьте выше в package.json и заново пряжите. неплохо для меня

webpack.config.js

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

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

См. Https://momentjs.com/docs/#/ -project-status /

Была ли эта страница полезной?
0 / 5 - 0 рейтинги