找不到模块'date-fns'

时间:2016-11-16 11:23:04

标签: angular typescript compiler-errors

使用

导入已安装的节点模块“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

4 个答案:

答案 0 :(得分:10)

请尝试使用此功能 首先导入模块

在终端类型

npm install date-fns @types/date-fns

然后在代码中

import * as startOfDay from "date-fns";

答案 1 :(得分:6)

如果您特别只想使用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标志的其他构建工具也将能够使用树木选项3,进一步假设您使用的是2.0.0-alpha.25或更高版本。 / p>

Date-fns通用模块化目前是我看到的主要优势" date-fns"与更受欢迎和已建立的时刻相比,#34;虽然作者还解释了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

答案 2 :(得分:1)

我应该说

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

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

答案 3 :(得分:0)

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

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