Javascript typescript:生成文件中的合并顺序
我有一个ts(angularjs)项目,并使用一个引用文件来指定依赖项的顺序。但是,它的顺序不正确。在生成的Javascript typescript:生成文件中的合并顺序,javascript,typescript,Javascript,Typescript,我有一个ts(angularjs)项目,并使用一个引用文件来指定依赖项的顺序。但是,它的顺序不正确。在生成的js文件中,控制器文件是最后一个,它应该在模块之前。因此,它在运行时给出错误,如模块中引用的TestCtrl test.am.controller(mod.test.TestCtrl.ID, [mod.test.TestService.ID, function (srv) { return new mod.test.TestCtrl(srv);
js
文件中,控制器文件是最后一个,它应该在模块之前。因此,它在运行时给出错误,如模块中引用的TestCtrl
test.am.controller(mod.test.TestCtrl.ID, [mod.test.TestService.ID, function (srv) {
return new mod.test.TestCtrl(srv);
}]);
那么,为什么不遵循引用
文件中的顺序呢?生成的文件控制器
文件中的任何原因都不包括在模块
之前,尽管它在模块.ts
文件中被引用
我使用grunt ts编译文件,命令是
Running "ts:dev" (ts) task
Verifying property ts.dev exists in config...OK
Files: src/controller.ts, src/module.ts, src/names.ts, src/reference.ts, src/service.ts
Options: allowBool=false, allowImportModule=false, compile, declaration=false, mapRoot="", module="amd", noImplicitAny=false, noResolve=false, comments, removeComments=null, sourceMap, sourceRoot="", target="es3", verbose=false, fast="watch"
Compiling...
Cleared fast compile cache for target: dev
Fast compile will not work when --out is specified. Ignoring fast compilation
Using tsc v0.9.5
"/Users/test/order2/src/controller.ts" "/Users/test/order2/src/module.ts" "/Users/test/order2/src/names.ts" "/Users/test/order2/src/reference.ts" "/Users/test/order2/src/service.ts" --sourcemap --target ES3 --module amd --out out.js
ps:grunt ts支持参考文件生成
,但我现在不想使用它
参考文献
/// <reference path="angularjs/angular.d.ts" />
/// <reference path="names.ts" />
/// <reference path="service.ts" />
/// <reference path="controller.ts" />
/// <reference path="module.ts" />
//
///
///
///
///
name.ts
//names section
/// <reference path="reference.ts" />
module mod{
export module test{
export var ID = "test"
}
}
//名称部分
///
模块模块{
导出模块测试{
导出var ID=“测试”
}
}
服务台
//service section
/// <reference path="reference.ts" />
module mod{
export module test{
export interface ITestService {
}
export class TestService implements ITestService {
static ID = ""
}
}
}
//服务部分
///
模块模块{
导出模块测试{
导出接口ITestService{
}
导出类TestService实现ITestService{
静态ID=“”
}
}
}
控制器
//controller section
/// <reference path="reference.ts" />
module mod{
export module test{
export interface ITestCtrl {
}
export class TestCtrl implements ITestCtrl {
static ID = ""
constructor(private rec:ITestService) {
}
}
}
}
//控制器部分
///
模块模块{
导出模块测试{
导出接口ITestCtrl{
}
导出类TestCtrl实现ITestCtrl{
静态ID=“”
构造函数(私有记录:ITestService){
}
}
}
}
模块1.ts
//modules section
/// <reference path="reference.ts" />
module mod{
export module test{
export var am:ng.IModule = angular.module(test.ID, ['ngRoute']);
am.controller(TestCtrl.ID, [TestService.ID, (srv:ITestService) => new TestCtrl(srv)]);
}
}
//模块部分
///
模块模块{
导出模块测试{
导出变量am:ng.IModule=angular.module(test.ID,['ngRoute']);
am.controller(TestCtrl.ID[TestService.ID,(srv:ITestService)=>newtestctrl(srv)];
}
}
生成的文件(js)
//名称部分
///
var-mod;
(功能(mod){
(功能(测试){
test.ID=“test”;
})(mod.test | |(mod.test={}));
var检验=模检验;
})(mod | |(mod={}));
//服务科
///
var-mod;
(功能(mod){
(功能(测试){
var TestService=(函数(){
函数TestService(){
}
TestService.ID=“”;
返回测试服务;
})();
test.TestService=TestService;
})(mod.test | |(mod.test={}));
var检验=模检验;
})(mod | |(mod={}));
//模块组
///
var-mod;
(功能(mod){
(功能(测试){
test.am=角度模块(mod.test.ID,['ngRoute']);
test.am.controller(mod.test.TestCtrl.ID、[mod.test.TestService.ID]函数(srv){
返回新的mod.test.TestCtrl(srv);
}]);
})(mod.test | |(mod.test={}));
var检验=模检验;
})(mod | |(mod={}));
//控制器部分
///
var-mod;
(功能(mod){
(功能(测试){
var TestCtrl=(函数(){
函数TestCtrl(rec){
this.rec=rec;
}
TestCtrl.ID=“”;
返回TestCtrl;
})();
test.TestCtrl=TestCtrl;
})(mod.test | |(mod.test={}));
var检验=模检验;
})(mod | |(mod={}));
//#sourceMappingURL=out.js.map
这是因为传入编译器的命令:
"/Users/test/order2/src/controller.ts" "/Users/test/order2/src/module.ts" "/Users/test/order2/src/names.ts" "/Users/test/order2/src/reference.ts" "/Users/test/order2/src/service.ts" --sourcemap --target ES3 --module amd --out out.js
顺序将由命令中传递的文件顺序决定,因为所有文件都引用reference.ts
,除非传递给编译器的文件都是reference.ts
So解决方案:使用grunt ts生成引用文件,因此grunt ts将只要求编译器编译reference.ts
或
具有显式
这是因为传递到编译器的命令:
"/Users/test/order2/src/controller.ts" "/Users/test/order2/src/module.ts" "/Users/test/order2/src/names.ts" "/Users/test/order2/src/reference.ts" "/Users/test/order2/src/service.ts" --sourcemap --target ES3 --module amd --out out.js
顺序将由命令中传递的文件顺序决定,因为所有文件都引用reference.ts
,除非传递给编译器的文件都是reference.ts
So解决方案:使用grunt ts生成引用文件,因此grunt ts将只要求编译器编译reference.ts
或
一旦我发现问题出在生成顺序上,haveexplicitTypescript的文档对我解决这个问题很有用
当输出文件通过out与参考文件通过reference组合指定时,grunt ts使用生成的参考文件在生成的JavaScript中对代码进行排序
使用reference.ts指定生成的几个文件的顺序
真正关心的是,剩下的由grunt-ts来维护
例如,在以下情况下,生成的JavaScript
someBaseClass.ts保证位于顶部,并生成
main.ts的JavaScript保证位于单个页面的底部
合并的js文件
//
//将注释放在这里,它们将被保留
//咕噜声开始
///
///
//呼噜声
///
grunt开始和grunt结束之间的所有内容都由grunt-ts生成和维护。如果没有找到grunt开始部分,则创建它。如果reference.ts最初不存在,也会创建它
尽管有时这一切感觉就像是试图遵守柯克船长在飞行中制定的规则。一旦我发现问题出在生成顺序上,Typescript的文档对我解决这个问题很有用
当输出文件通过out与参考文件通过reference组合指定时,grunt ts使用生成的参考文件在生成的JavaScript中对代码进行排序
使用reference.ts指定生成的几个文件的顺序
真正关心的是,剩下的由grunt-ts来维护
例如,在以下情况下,生成的JavaScript
someBaseClass.ts保证位于顶部,并生成
main.ts的JavaScript保证位于单个页面的底部
合并的js文件
//
//将注释放在这里,它们将被保留
//咕噜声开始
///
///
//呼噜声
///
/// <reference path="someBaseClass.ts" />
// Put comments here and they are preserved
//grunt-start
/// <reference path="autoreference.ts" />
/// <reference path="someOtherFile.ts" />
//grunt-end
/// <reference path="main.ts" />