Ошибка TypeScript: не удается найти модуль «момент» - PullRequest
8 голосов
/ 01 мая 2020

У меня есть приложение TypeScript React, использующее npx create-react-app --template typescript. Когда я запускаю npm start, я получаю сообщение об ошибке в одном из моих файлов:

TypeScript error in /<path>/App.tsx:
Cannot find module 'moment'.  TS2307

Импорт:

import moment from 'moment'

tsconfig. json

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": false,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react",
    "noImplicitAny": false,
    "experimentalDecorators": true
  },
  "include": ["src", "husky.config.js", "lint-staged.config.js"]
}

Использование "moment": "^2.25.0" в package.json. Использование npm.

Глядя в каталог node_modules, я вижу пакет moment, а в файле package.json указано, что moment на версии 2.25.0

Я пытался очистить npm кэш, удалить node_modules и package-lock.json, переустановить, импортировать как import * as moment from 'moment'.

Есть идеи? Это просто случайно начало происходить сегодня. Заранее спасибо.

Ответы [ 3 ]

16 голосов
/ 01 мая 2020

Обновление

В момент выпуска версии 2.25.1. Это исправляет проблему.

Старый ответ

Это проблема текущей версии 2.25.0,

https://github.com/moment/moment/issues/5486

Удалите папку package-lock. json и node_modules , замените эту строку кода в вашем пакете. json

"moment": "2.24.0",

обратите внимание, удалите ^ , иначе он продолжит установку 2.25.0

, затем npm install

Это должно решить проблему.

0 голосов
/ 01 мая 2020

Вы сделали все правильно, в приложении нет ничего плохого. Просто ошибка в операторе импорта, поскольку она была обновлена.

Начиная с версии 2.13.0 , Moment включает файл определения машинописного текста.

Установка через NPM npm момент установки

Импорт и использование в вашем файле Typescript -

import * as moment from 'moment';
let now = moment().format('LLLL');

Примечание: Если у вас возникли проблемы с импортом момента для Typescript 2.x попробуйте добавить "moduleResolution": "node" в compilerOptions в файл tsconfig.json (в каталоге приложения root), а затем используйте любой из приведенных ниже синтаксисов

import * as moment from 'moment';
import moment = require('moment');

Для Typescript 1 .x попробуйте добавить "allowSyntheticDefaultImports": true в compilerOptions в ваш tsconfig.json файл и затем используйте синтаксис

import moment from 'moment';
let now = moment().format('LLLL');
0 голосов
/ 01 мая 2020

Вы должны установить пакет, прежде чем использовать его в своем коде. Таким образом, вы можете установить библиотеку моментов, используя npm (менеджер пакетов узлов)

npm install moment

, а затем импортировать эту библиотеку

import * as moment from 'moment'

Тогда вы можете go.

...