导入Node.js npm模块(node_modules)

Importing Node.js npm modules (node_modules) & declarations in TypeScript

我认为直接从node_modules目录中导入模块而无需手动为其提供声明文件(让我们假设声明是模块本身提供的)将是很好的。我猜这是声明附带的依赖关系(文件路径可以相对于模块解析,但这会导致重复,而编译器无法处理)。
当前使用节点模块非常不方便,因为仅从npm存储库进行简单安装还不够,我们必须手动搜索声明并将其提供给我们的项目。假设我们的项目依赖于10个节点模块(所有模块都有声明),并且一年后我们想对其进行更新。我们将不得不手动搜索新的声明,并假设我们大约有20个这样的项目(这将成为噩梦)。也许应该有一个直接从节点模块导入.ts文件的选项?

您有什么建议吗?

这是CodePlex的转贴,以听取您的意见...


如果您使用grunt-typescript,那么我有一个pull请求,至少可以解决这个问题。参见https://github.com/k-maru/grunt-typescript/pull/36

来自拉取请求README

使用node_modules中的模块(即npm)

使用npm软件包的标准方法是提供一个定义文件
将包指定为typescript,然后从那里导入模块。

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

typescript编译器会将import转换为nodejs require

1
var mod = require('mod')

这很笨拙,因为您需要知道通往
npm已安装的软件包,npm几乎可以将软件包放在任何位置
使用多个级别的依赖项时的级别。

使用grunt配置中的node_modules选项,您可以
import一个npm程序包,而无需知道确切的级别
软件包已由npm安装,只要已在本地安装
而不是全局。

要在typescript源中import一个npm模块做

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

主要是由于幸运的机会,该方法有效。 Typescript编译器将读取
typescript定义文件node_modules/npmModule/foo.d.ts(如果有)
存在于通往根部和结果的途中的某个位置
如果需要,javascript文件将包含npmModule/foorequire


我认为节点模块永远不会包含内置的typescript支持。该语言仍然是0.x版本,并正式描述为Alpha版本。

尽管如此,仍有一些方法可以简化typescript的配置过程。 Github已经包含了大量的.d.ts文件,例如:

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

您可能想看看这个工具:https://github.com/Diullei/tsd。
我从未使用过它,但似乎几乎是您要寻找的东西。

此外,我听说已经计划了.d.ts文件的正式数据库。不幸的是,我找不到该链接,但是可能仍然需要一段时间才能实现。