【问题标题】:TypeScript error: Cannot find module 'moment'TypeScript 错误:找不到模块“时刻”
【发布时间】: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

标签: reactjs typescript npm momentjs


【解决方案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 安装

      这应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 2017-01-17
        • 1970-01-01
        • 2017-04-15
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多