在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/foo
的require
。
我不认为节点模块将永远包含内置的打字稿支持。 该语言仍然是一个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文件数据库正在计划中。 不幸的是,我找不到链接,但可能需要一段时间才能实现。