Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript typescript:生成文件中的合并顺序_Javascript_Typescript - Fatal编程技术网

Javascript typescript:生成文件中的合并顺序

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);

我有一个ts(angularjs)项目,并使用一个引用文件来指定依赖项的顺序。但是,它的顺序不正确。在生成的
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


一旦我发现问题出在生成顺序上,haveexplicit
Typescript的文档对我解决这个问题很有用

当输出文件通过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" />