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_modules
和package-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.json 和 node_modules 文件夹,替换您的 package.json
中的这行代码"moment": "2.24.0",
注意,删除^,否则会继续安装2.25.0
然后 npm 安装
这应该可以解决问题。
【讨论】:
以上是关于TypeScript 错误:找不到模块“时刻”的主要内容,如果未能解决你的问题,请参考以下文章
Nuxt TypeScript 错误:nuxt:typescript 找不到模块'@/my-module'
TypeScript + moment.js:错误 TS2307:找不到模块'moment'