繁体   English   中英

在TypeScript中导入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包的标准方法是提供一个定义文件,该文件指定打字稿的包并从那里导入模块。

///<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定义文件node_modules/npmModule/foo.d.ts如果它存在于朝向根的路上的某个点,并且如果需要,生成的javascript文件将包含npmModule/foorequire

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM