【问题标题】:Cannot find module 'date-fns'找不到模块“日期-fns”
【发布时间】:2017-03-30 13:52:42
【问题描述】:

当我使用

导入安装的节点模块“date-fns”时

import { startOfDay } from 'date-fns';

然后我得到编译错误:

error TS2307: Cannot find module 'date-fns'.

但是以下没有给出任何错误:

var startOfDay = require('date-fns');

知道为什么会这样吗?

以下是我安装的 date-fns:

node_modules/date-fns/
├── start_of_day
│   ├── index.js
│   └── index.js.flow

【问题讨论】:

    标签: angular typescript compiler-errors


    【解决方案1】:

    我觉得这是一个更好的方法

    import  {differenceInCalendarDays, parseISO } from 'date-fns';
    

    【讨论】:

      【解决方案2】:

      如果您只想使用 start_of_day 函数,则应改为遵循 documentation

      使用 npm 安装

      npm install date-fns --save
      

      或者用纱线:

      yarn add date-fns
      

      示例用法:

      // option 1
      var startOfDay = require('date-fns/start_of_day');
      
      // option 2
      // import * as startOfDay from 'date-fns/startOfDay';
      
      // option 3 (only 2.0.0-alpha.25 or higher)
      // import { startOfDay } from 'date-fns';
      
      // The start of a day for 2 September 2014 11:55:00:
      var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0));
      //=> Tue Sep 02 2014 00:00:00
      

      好处

      选项 1 和 2 应该允许大多数构建工具轻松地仅包含您实际使用的内容,从而使您的最终捆绑包更小,从而使您的 Web 应用加载速度稍快。 Webpack 4 和其他可能查看添加到库中的 sideffect 标志的构建工具也将能够 treeshake 选项 3,进一步假设您使用的是 2.0.0-alpha.25 或更高版本。

      Date-fns 通用模块化是目前我看到“date-fns”与更流行和成熟的“moment”相比的主要优势。尽管作者还在a github issue 中解释了其他优点。

      不要导入所有的“date-fns”

      提到的两个工作解决方案都只是获取整个“date-fns”库,因此仍然是一个有效的语法,但将变量标记为“startOfDay”给人的印象是实际加载或使用的唯一部分是这个功能。当所有其他功能也徒劳无功时。其中“start_of_day”只是加载在同一个对象上的众多函数之一。

      因此,如果您真的想加载所有函数,则应改为调用变量“date-fns”。但是,考虑到便利性和好处,我不明白您为什么不只遵循文档并导入单个函数。

      类型定义

      编辑: 使用 TypeScript 2+,您将直接从库(版本 1.23+)中获取类型定义。

      早期版本(1.22.x 及更低版本)应遵循 Edwin Kato 关于安装“date-fns”类型定义的建议。但是,您还应该将其保存到“package.json”中的本地开发依赖项中。使用 npm 时,您需要明确说明这一点。使用纱线时,您需要声明它是开发依赖而不是常规依赖。

      因此你应该使用 npm 像这样安装它:

      npm install @types/date-fns --save-dev
      

      或者用纱线:

      yarn add @types/date-fns --dev
      

      【讨论】:

      • 请注意,不推荐为 date-fns 安装类型定义。该库提供自己的类型定义
      • @PieterDeBie 谢谢,相应地更新了我的帖子。还更新了其他一些内容,例如您可以导入的各种方式。
      【解决方案3】:

      我应该说吗

      import * as startOfDay from 'date-fns/startOfDay';
      

      似乎我一直在使用 Angular Typescript 代码中的其他库做类似的事情。

      【讨论】:

        【解决方案4】:

        尝试改用这个 首先导入模块

        在终端类型中

        npm install date-fns @types/date-fns
        

        然后在代码中

        import * as startOfDay from "date-fns";
        

        【讨论】:

        • 你完成了 npm install date-fns 和 npm install @types/date fns
        • 成功了。多谢。不知道如何将您的答案标记为已回答。我会检查..
        • 只需在我的答案的投票数下方寻找勾号,然后单击它。它将帮助其他有类似问题的人知道什么是有效的。很高兴我能帮忙
        猜你喜欢
        • 2019-03-12
        • 2019-12-13
        • 1970-01-01
        • 2020-01-15
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        相关资源
        最近更新 更多