dee*_*hao 6 amd requirejs typescript
我有一个page-a.ts会编译成page-a.js:
alert('this is from page-a');
Run Code Online (Sandbox Code Playgroud)
我有一个main.ts编译成main.js:
import pageA = module('page-a')
alert('this is from main');
Run Code Online (Sandbox Code Playgroud)
这是我的tsc命令行:
tsc --module amd page-a.ts main.ts
Run Code Online (Sandbox Code Playgroud)
我正在使用requirejs这样的:
<script src="require.js" data-main="main.js"></script>
Run Code Online (Sandbox Code Playgroud)
page-a加载页面时,我看不到警报消息框.在生成的脚本中main.js,没有任何内容page-a.
我的问题是,为什么会发生这种情况?如何强制打字稿导入代码未明确使用的模块?
Ric*_*tte 11
除了@basarat提到的方法之外,还有另外两种方法可以确保导入的模块包含在define函数中并因此加载.
在ams-dependency元素的顶部包含amd-dependency元素.
///<amd-dependency path="pathToFileRelativeToBaseWithoutFileExtension"/>
Run Code Online (Sandbox Code Playgroud)
要么
import moduleName = require("pathToFileRelativeToBaseWithoutFileExtension");
moduleName; //Does not require declaring a new variable.
Run Code Online (Sandbox Code Playgroud)
前者可能是副作用最小的人.不幸的是,元素及其用法没有很好地记录.
我在使用延迟加载AngularJS模块时发现这些方法是必需的,这些模块创建并注册要依赖注入的类型.由于就TS编译器而言永远不会创建或分配类型,因此它不会为define函数创建必要的参数.
他们说这是设计(https://typescript.codeplex.com/workitem/2436),但我恭敬地不同意.如果我已导入模块/文件并且我在该模块中引用了具体类型,则必须在该点加载该模块才能运行.必须做额外的步骤是多余的.
您生成的 js 不会导入代码中未明确使用的模块。Typescript 的这种方式很聪明,不会为只导入而不使用的模块生成任何 js。
你需要 :
所以 page-a.js 是这样的:
export var x = 123; // just to export something that you can use
alert('this is from page-a');
Run Code Online (Sandbox Code Playgroud)
和 main.ts 为:
import pageA = module('page-a')
var foo = pageA.x; // If you remove this line and you will not get the alert from page-a
alert('this is from main');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |