TypeScript 错误:找不到模块“时刻”

Posted

技术标签:

【中文标题】TypeScript 错误:找不到模块“时刻”【英文标题】:TypeScript error: Cannot find module 'moment' 【发布时间】:2020-08-15 15:36:30 【问题描述】:

我有一个使用 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'一样导入。

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

【问题讨论】:

您是否更改了导致此错误出现的代码中的任何内容?是否使用不同的导入? 也许你也应该发布你的package.json 我这里也有同样的问题,我替换了import Moment from '../../moment/moment'; 现在它可以工作了,但是我不知道为什么当import Moment from 'moment'; 它发生在角度图表模块中时它不起作用方式。 moment 版本 2.25.0 似乎存在问题。 github.com/moment/moment/issues/5486。尝试使用 2.24.0 【参考方案1】:

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

npm install moment

然后导入这个库

import * as moment from 'moment'

那你就可以走了。

【讨论】:

【参考方案2】:

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

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

通过 NPM 安装 npm 安装时刻

在您的 Typescript 文件中导入和使用-

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

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

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

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

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

【讨论】:

【参考方案3】:

更新

版本 2.25.1 现已发布。这解决了问题。

旧答案

是moment 2.25.0版本的问题,

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

删除您的 package-lock.jsonnode_modules 文件夹,替换您的 package.json

中的这行代码
"moment": "2.24.0",

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

然后 npm 安装

这应该可以解决问题。

【讨论】:

以上是关于TypeScript 错误:找不到模块“时刻”的主要内容,如果未能解决你的问题,请参考以下文章

错误:找不到 npm 模块“时刻”

Nuxt TypeScript 错误:nuxt:typescript 找不到模块'@/my-module'

TypeScript + moment.js:错误 TS2307:找不到模块'moment'

LernaJS Typescript 找不到模块

从 5 到 6 的角度迁移后无法构建 - 找不到模块“打字稿”

VueJS/Typescript 错误:找不到模块“我的模块”或其相应的类型声明