打字脚本错误:找不到模块'moment'



我有一个使用npx create-react-app --template typescript的TypeScript React应用程序。当我运行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"]
}

package.json中使用"moment": "^2.25.0"。使用 npm。

node_modules目录中查看,我可以看到moment包,package.json文件显示moment版本为2.25.0

我尝试清除npm缓存,删除node_modulespackage-lock.json,重新安装,像import * as moment from 'moment'一样导入。

有什么想法吗?这是今天随机开始的。提前谢谢。

更新

时刻版本2.25.1发布。这将修复此问题。

旧答案

这是时刻版本2.25.0的问题,

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

删除你的package-lock.jsonnode_modules文件夹,替换你的package.json中的这行代码

"moment": "2.24.0",

注意,删除^,否则它将继续安装 2.25.0

然后npm 安装

这应该可以解决问题。

在代码中实际使用它之前,您必须先安装一个包。所以你可以使用 npm(节点包管理器)安装矩库

npm install moment

然后导入此库

import * as moment from 'moment'

那你就可以走了。

您做得完全正确,在应用程序的脚手架中没有错。只是导入语句中的一个错误,因为它已更新。

版本2.13.0开始,Moment包含一个打字稿定义文件。

通过 NPM 安装 npm 安装时刻

导入并在您的打字稿文件中使用 -

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

注意:如果您在导入时刻时遇到问题 对于Typescript 2.x,请尝试在tsconfig.json文件(在应用程序根目录中)中添加"moduleResolution": "node"compilerOptions,然后使用以下任何语法

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

对于Typescript 1.x,请尝试在tsconfig.json文件中添加"allowSyntheticDefaultImports": truecompilerOptions,然后使用语法

import moment from 'moment';
let now = moment().format('LLLL');
  1. npm 安装时刻

  2. 如果仍然发现错误,请删除node_modules<--->

  3. 然后 npm 我<---再次安装软件包>

  4. 然后导入此库 从"时刻"导入 * 作为时刻

最新更新