我目前正在开发一个TypeScript应用程序,其中包括多个使用TypeScript编写的Node模块,这些模块被安装到node_modules
目录中。
在继续之前,我要注意一下,我正在使用TypeScript 2.0,如果需要,我也不排斥使用2.1开发版本。我只是想让这个工作起来。
每个Node模块的结构大致如下:
dist/
es2015/
index.js
utils/
Calculator.js
Calculator.d.ts
Date.js
Date.d.ts
Flatpack.js
Flatpack.d.ts
src/
index.ts
utils/
Calculator.ts
Date.ts
Flatpack.ts
dist文件夹是生成的源代码,该路径通过在我的tsconfig.json
文件中配置outDir
来配置。我还将package.json
中的main
属性配置为dist/es2015/index.js
。
需要注意的重要事项:
- 在我的项目中,我使用了
node
的moduleResolution
类型。 - 我正在使用TypeScript 2.0
- 我不是在问如何从包内导入文件。我通过Npm安装程序包,然后在使用此模块的应用程序中通过
packagename/
进行导入。
现在来谈谈我的问题/问题所在。当从此模块中导入文件时,我想能够这样做:
import {Sin, Cos, Tan} from "common-utils/utils/Calculator";
然而,该文件无法解析到 dist/es2015/utils
目录。理想情况下,我希望我的引用从这个特定的 dist
文件夹解析,而不是从根目录解析,这似乎是正在发生的事情。
为了使其正常工作,上述导入需要编写成以下形式:
import {Sin, Cos, Tan} from "common-utils/dist/es2015/utils/Calculator";
然而,每次写dist/es2015
都不是理想的解决方法,这只会使某些导入看起来非常冗长。我是否可以配置我的模块以解析到dist/es2015
目录? 我不想在我的项目中放置覆盖,理想情况下每个模块都会指定文件的解析位置。
如果您仍然不确定我的要求(如果这很令人困惑,我很抱歉),在使用Jspm创建插件/模块时,您可以在模块的package.json
中指定类似以下内容:
"jspm": {
"registry": "npm",
"jspmPackage": true,
"main": "my-module",
"format": "amd",
"directories": {
"dist": "dist/amd"
},
我正在寻找TypeScript中类似的东西(如果有的话)。映射指令,所以当最终用户运行npm install my-cool-package
,然后在他们的应用程序中尝试导入某些内容时,默认情况下所有导入都会解析到commonjs
目录(上面的示例针对Jspm使用amd,但原理相同)。
这是否可能,还是我误解了什么?我知道一些新的路径映射功能已添加到最新版本中,但几乎没有关于如何使用它们的文档。
index.ts
中导入了Calculator.ts
,你可以尝试使用import {Sin,Cos,Tan} from "./utils/Calculator"
。 - irakli khitarishvilinode_modules
中的模块,然后使用from "packagename/"
导入 - 问题在于添加直接路径到 dist 文件夹感觉很混乱,我想将其别名为默认导入位置,但要从模块内部完成,而不是我必须在消费模块的项目中进行配置。 - Dwayne Charrington