在TypeScript中导入Node.js npm模块(node_modules)和声明

我认为从node_modules目录直接导入模块,而不需要手动为它提供一个声明文件(让我们假设声明是由模块本身提供的),将是非常好的。 我想这个问题是依赖声明(文件path可以解决相对于模块,但这会导致重复和编译器无法处理)。 目前使用节点模块是非常不方便的,因为从npm存储库简单安装是不够的,我们必须手动search声明并在我们的项目中提供它们。 假设我们的项目依赖于10个节点模块(所有这些模块都有声明),一年之后,我们想更新它们。 我们将不得不手动search新的声明,假设我们有大约20个这样的项目(这将成为一场噩梦)。 也许应该有一个选项,直接从节点模块导入.ts文件?

你有什么build议吗?

这是来自CodePlex的重新发布,以听取您的意见…

如果你使用grunt-typingcript,那么至less对我来说,我已经有了一个pull请求来解决这个问题。 见https://github.com/k-maru/grunt-typescript/pull/36

从拉请求README

使用node_modules中的模块(即npm)

使用npm包的标准方法是提供一个定义文件,指定打包到打字稿并从那里导入模块。

///<reference path="path/to/mod.d.ts" /> import mod = module('mod') 

打字稿编译器会将import转换为nodejs require

 var mod = require('mod') 

这是非常不方便的,因为你需要知道npm安装包的确切path,当你使用多级依赖时,npm可以把包放在几乎任何级别。

使用gruntconfiguration中的node_modules选项,只要import npm软件包,而不需要知道npm安装软件包的确切级别,只要它安装在本地而不是全局安装。

在打字稿源中import一个npm模块

 import npmModule = module('node_modules/npmModule/foo') 

主要是由于幸运的机会这个作品。 Typescript编译器将读取打字稿定义文件node_modules/npmModule/foo.d.ts如果它出现在朝向根的路上的某个点),并且如果需要,生成的JavaScript文件将包含对npmModule/foorequire

我不认为节点模块将永远包含内置的打字稿支持。 该语言仍然是一个0.x版本,并正式描述为一个alpha版本。

尽pipe如此,还是有办法缓解打字稿的configuration过程。 Github已经包含大量的.d.ts文件,比如:

https://github.com/borisyankov/DefinitelyTyped或https://github.com/soywiz/typescript-node-definitions

你可能想看看这个工具: https : //github.com/Diullei/tsd 。 我从来没有使用它,但它似乎几乎是你在找什么。

而且我听说有一个官方的.d.ts文件数据库正在计划中。 不幸的是,我找不到链接,但可能需要一段时间才能实现。