我有一个使用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'
一样导入。
有什么想法吗?这是今天随机开始的。提前谢谢。
更新
时刻版本2.25.1发布。这将修复此问题。
旧答案
这是时刻版本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 安装
这应该可以解决问题。
在代码中实际使用它之前,您必须先安装一个包。所以你可以使用 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": true
compilerOptions
,然后使用语法
import moment from 'moment';
let now = moment().format('LLLL');
-
npm 安装时刻
-
如果仍然发现错误,请删除node_modules<--->
-
然后 npm 我<---再次安装软件包>
-
然后导入此库 从"时刻"导入 * 作为时刻