导入Node.js npm模块(node_modules)& TypeScript中的声明

时间:2013-04-19 07:47:25

标签: node.js typescript

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

你有什么建议吗?

这是CodePlex的重新发布,以听取您的意见......

2 个答案:

答案 0 :(得分:2)

如果你使用grunt-typescript,那么我有一个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')

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

var mod = require('mod')

这是非常笨拙的,因为你需要知道准确的路径 npm安装包和npm可以把包放在任何地方 处理多个级别的依赖项时的级别。

使用grunt配置中的node_modules选项即可 import一个npm包,无需知道确切的级别 只要在本地安装,npm就已经安装了软件包 而不是全球性的。

到打字稿来源的import npm模块

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

主要是因为幸运的机会。 Typescript编译器将读取 打字稿定义文件node_modules/npmModule/foo.d.ts,如果它 在通向根的路上和结果的某一点上存在 如果需要,javascript文件将包含require npmModule/foo

答案 1 :(得分:1)

我认为节点模块不会包含内置的打字稿支持。该语言仍为0.x版本,官方称为alpha版本。

然而,有一些方法可以简化打字稿的配置过程。 Github已经包含大量的.d.ts文件集合,例如:

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

您可能需要查看此工具:https://github.com/Diullei/tsd。 我从来没有用它,但它似乎几乎就是你要找的东西。

此外,我听说计划使用.d.ts文件的官方数据库。不幸的是,我找不到链接,但可能还需要一段时间才能实现。