【发布时间】:2016-11-30 19:02:07
【问题描述】:
我目前正在开发一个 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。
需要注意的重要事项:
- 在我的项目中,我使用
moduleResolution类型的node - 我使用的是 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 一起使用的插件/模块时在 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" -
如果从包本身导入,这肯定会起作用。但是,我的问题是这是我安装到
node_modules中的一个模块,然后使用 `from "packagename/" 导入 - 问题是添加到 dist 文件夹的直接路径感觉很乱,我想将其别名为将此设置为默认导入位置,但在模块内进行,而不是我必须在使用模块的项目中配置。 -
如果您添加配置对象,您可以在其中添加包名或文件名并“构建”您的路径,还要查看 system.js 或 webpack 以完成此任务
-
我希望避免构建任务以使路径逻辑正常工作。话虽如此,这似乎是大多数 CommonJS 模块构建方式的规范。