Я получаю это предупреждение при использовании 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
какие-нибудь подсказки?
См. №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 /
Самый полезный комментарий
Я использовал модуль игнорирования с хорошими результатами. Это может кому-то помочь: