相关疑难解决方法(0)

System.js不显示完整堆栈跟踪

我正在使用System.js加载用TypeScript编写的模块.System.js将我的原始代码包装在一个函数中,因此当我的代码中出现错误并尝试在Chrome开发人员工具中看到它时,单击错误只会将我带到JavaScript文件的第一行,其中有一个声明System.js添加的包装函数,而不是原始TypeScript文件中的正确行.

通常这不是问题,因为System.js将自己的堆栈跟踪添加到错误的末尾并单击它会将我带到原始TypeScript文件中没有包装函数的正确行.

但是,有时System.js不包含整个堆栈跟踪,那么Chrome生成的原始堆栈跟踪是查看错误行的唯一位置,但问题是单击它会将我带到JavaScript文件而不是TypeScript一个,并且到第一行,而不是正确的,如上所述.

我的问题:这是System.js中的错误还是我做错了什么?

为了使它更容易理解,我将在这里添加我的代码并解释方案.但请记住,我不会尝试修复我的代码,而是要了解为什么我无法通过开发人员工具找到正确的错误行.

所以这是我的System.js声明和配置:

<script src="/assets/libs/systemjs-master/dist/system-polyfills.js"></script>
<script src="/assets/libs/systemjs-master/dist/system.src.js"></script>

<script>
        System.config({
            defaultJSExtensions: true,
            transpiler: 'typescript',
        });

        System.import('app.module')
                  .then(null, console.error.bind(console));

 </script>
Run Code Online (Sandbox Code Playgroud)

这是app.module(System.js加载的根文件):

import './angular-1.4.7'
import './angular-route.min'
import {User} from "./classes";
import {Post} from "./classes";
import {BlogModel} from  "./model"

var app: angular.IModule = angular.module("blogApp", ["ngRoute"]);

var model: BlogModel = new BlogModel();

app.run(function($http: angular.IHttpService): void{
    $http.get("/user-context/current-user")
    .success(function(currentUser: User): void{
        if(currentUser.userName) {
            model.currentUser = currentUser;
        }
    }); 

  ... 
});

...
Run Code Online (Sandbox Code Playgroud)

产生错误的行:

$http.get("/user-context/current-user")
Run Code Online (Sandbox Code Playgroud)

这是我得到的完整堆栈跟踪:

在此输入图像描述

正如您所看到的,正确的错误行仅显示在OOTB开发人员工具堆栈跟踪中,但不显示在System.js中(50%的时间确实显示实际错误行,并且应该始终执行此操作).

当我点击OOTB开发人员工具堆栈跟踪中的错误行时,我只是突出显示第一行的这个文件:

(function(require, exports, module, __filename, __dirname, global, GLOBAL) { …
Run Code Online (Sandbox Code Playgroud)

javascript typescript systemjs

5
推荐指数
1
解决办法
758
查看次数

在客户端和服务器之间共享TypeScript类

我有一个用TypeScript编写的Node.js项目.在我的项目中,我有一个名为"public"的文件夹,其中包含客户端代码和HTML以及一个名为classes.ts的文件,该文件应该与服务器端共享.

问题是我需要在类声明之前添加"export"以使它们在服务器中可访问,但是在浏览器中我得到此错误:

未捕获的ReferenceError:未定义导出

我发现了这些问题:https: //github.com/Microsoft/TypeScript/issues/5094, 使用客户端和服务器应用程序之间共享的类设置一个Typescript项目?, 使用TypeScript在客户端和服务器之间共享模块,建议在服务器中使用commonjs,但在客户端中使用.这个解决方案的问题是它们有3个不同的项目(服务器,客户端和共享),而我只有一个项目,我使用commonjs.另一个建议是:

另一种选择,更复杂,需要一个后期构建步骤来按摩代码; 如果你不能在客户端代码中使用模块加载器,那就是隔离服务器代码中的所有模块依赖关系,那么在共享中,它们只是类.不使用--module构建共享文件,也不构建导出或导入,而是在单个命名空间内构建共享文件,例如命名空间MyApp {...}; 在您的客户端代码中,您直接包含它们,并使用--out发出.在您的服务器代码中,您首先将共享代码发送到单个文件shared.js和单个.d.ts shared.d.ts,使用一些代码扩充它们以将它们导出为模块,例如append exports = MyApp在shared.js和shared.d.ts的末尾,然后从服务器代码中导入它们.

但我不想一直处理更新.d.ts文件,我也不确定它是否可以在一个项目中工作.

有关如何在浏览器和服务器中访问TypeScript类的任何建议吗?

任何帮助将深表感谢!

amd commonjs node.js typescript

3
推荐指数
1
解决办法
2755
查看次数

标签 统计

typescript ×2

amd ×1

commonjs ×1

javascript ×1

node.js ×1

systemjs ×1