requirejs - TypeScript:仅包​​含语句的导入模块

标签 requirejs typescript amd

我有一个 page-a.ts 可以编译成 page-a.js:

alert('this is from page-a');

我有一个编译成main.jsmain.ts:

import pageA = module('page-a')
alert('this is from main');

这是我的 tsc 命令行:

tsc --module amd page-a.ts main.ts

我正在像这样使用 requirejs:

<script src="require.js" data-main="main.js"></script>

加载页面时,我看不到来自 page-a 的警告消息框。在生成的脚本 main.js 中,没有关于 page-a 的内容。

我的问题是,为什么会这样?以及如何强制 typescript 导入代码未明确使用的模块?

最佳答案

除了@basarat提到的方法之外,还有两种方法可以确保导入的模块包含在define函数中并因此加载。

在 TypeScript 文件的顶部包含 amd-dependency 元素。

///<amd-dependency path="pathToFileRelativeToBaseWithoutFileExtension"/>

import moduleName = require("pathToFileRelativeToBaseWithoutFileExtension");
moduleName;  //Does not require declaring a new variable.

前者可能是产生副作用可能性最小的一种。不幸的是,该元素及其用法没有很好的记录。

我发现在使用延迟加载 AngularJS 模块时需要这些方法来创建和注册要依赖注入(inject)的类型。由于就 TS 编译器而言,类型永远不会创建或分配,因此它不会为 define 函数创建必要的参数。

他们说这是设计使然 (https://typescript.codeplex.com/workitem/2436),但我谨表示不同意。如果我已经导入了一个模块/文件并且我在该模块中有一个具体类型的引用,那么该模块必须在那个时候加载才能运行。必须执行额外的步骤是多余的。

关于requirejs - TypeScript:仅包​​含语句的导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16455211/

相关文章:

javascript - RrequireJS优化器以及优化后加载动态路径

javascript - 将 SammyJs 与 RequireJs 结合使用

unit-testing - Angular2(TypeScript)中的单元测试/模拟窗口属性

javascript - 将 jQuery Mobile (1.1.0) 与 AMD (RequireJS) 分开

c++ - 如何在 AMD 显卡上获取 GPU 负载百分比和 GPU 温度

requirejs - require.js 获取/加载顺序调试

typescript - 如何在 Visual Studio 2015 RTM 中设置 TypeScriptTarget

typescript - 带有 typescript 的 Mongoose :Object is possibly null

javascript - 在 RequireJS 中为模块 ID 分配 "shortcut"?

javascript - 解决 Node.js 中的 "Uncaught ReferenceError: require is not defined"错误