【发布时间】:2018-09-24 17:28:33
【问题描述】:
场景:
我正在使用 TypeScript(版本 >= 3)开发一个脚本。我的脚本具有依赖于一个著名的图形库的功能,该库本身是用 JavaScript 编写的。我已经在我的项目中本地安装了这个库及其 TypeScript 类型定义,导致相关文件被放置在“node_modules”目录的适当子目录中。
我的项目设置为将我的 TypeScript 转换为 ES6 规范的 JavaScript。
我在表单的主要 TypeScript 文件的顶部有一个导入语句:
import * as LIB from 'library'
其中“library.js”是所需的库文件,位于“node_modules”的子目录中的某个位置。 TypeScript 编译器有自己的复杂过程module resolution,这意味着它可以在不需要相对文件路径或文件扩展名的情况下找到这个文件。
如果我在我的主“.ts”文件上运行 TypeScript 编译器,我会得到一个 JavaScript 文件。因为我使用的是 ES6,所以生成的 JavaScript 文件中的 import 语句与我的 TypeScript 源代码中的相同。这是我的问题。
脚本在我的本地开发服务器上运行时找不到生成的 JavaScript 尝试导入的文件,因为它尝试导入的文件位于“node_modules”目录中的某个位置,并且导入未指向到那个目录。因此,在执行代码时,浏览器控制台中会显示类似于 Error resolving module specifier 的错误。
我希望代码从 TypeScript 转换为 JavaScript (ES6),这样当我将代码从本地测试服务器提供给浏览器时,生成的 JavaScript 中的导入可以被解析。
问题:
1) 这种行为是否是我错误配置 TypeScript 编译器的结果?
2) 这种行为是由“tsconfig.json”和/或“package.json”配置文件中的属性导致还是直接受其影响?
3) 这实际上是一个问题,还是这一切都是由于我不了解如何从 Node 服务器组织和提供文件?
提前感谢您的帮助。
【问题讨论】:
-
它应该可以正常工作,但要避免
*导入,除非库作为 ESM 提供。无论如何,很容易测试这个问题。 1:> node2:var lib = require("library"); console.table(lib);
标签: javascript node.js typescript