"Ctrl + click to follow link" 在 VSCode 终端不跳转到源文件但打开新的浏览器选项卡
"Ctrl + click to follow link" in VSCode terminal does not jump to source file but opens new browser tab
我正在使用 Visual Studio 代码(版本 1.40.1)来处理我的 Angular 8 项目和 运行 Karma/Jasmine 通过命令 ng test
从其终端进行测试。当测试失败时,我总是能够通过终端 link 上的 Ctrl + click
跳转到相关的源文件,嵌入在堆栈跟踪中。几天后,这不再有效,而是打开了一个新的 Chrome 浏览器选项卡。
我认为问题可能与任何最近更新的 npm
软件包有关。因此,我创建了一个全新的 Angular 8 项目 (ng new
),在 app.component.spec.ts
中做了一个小改动并启动了 ng test
。不幸的是,那里也出现了同样的问题。完全卸载并重新安装 VSCode 也没有帮助。
知道如何恢复原来的功能(跳转到源代码)吗?
package.json
{
"name": "app",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "~8.2.13",
"@angular/common": "~8.2.13",
"@angular/compiler": "~8.2.13",
"@angular/core": "~8.2.13",
"@angular/forms": "~8.2.13",
"@angular/platform-browser": "~8.2.13",
"@angular/platform-browser-dynamic": "~8.2.13",
"@angular/router": "~8.2.13",
"rxjs": "~6.4.0",
"tslib": "^1.10.0",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.18",
"@angular/cli": "~8.3.18",
"@angular/compiler-cli": "~8.2.13",
"@angular/language-service": "~8.2.13",
"@types/node": "~8.9.4",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"codelyzer": "^5.0.0",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
"typescript": "~3.5.3"
}
}
karma.config.js
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, './coverage/app'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};
就我而言,我快疯了,它一天天停止工作。研究,我发现VS应用了自动更新,并禁用了一些 Angular 扩展,我不知道为什么? (在我的例子中,碰巧开发了一个 angular 8 应用程序)。
所以我的工作解决方案是扩展,按“@disabled”过滤并启用 angular - 或者你的情况 - 扩展
打开VsCode,按F1,搜索打开用户设置,点击打开用户设置。一个window会来。在左侧搜索终端并尝试将 allowchords 关闭为 false。
如果您看到的不是 window,而是 json。放:-
"terminal.integrated.allowChords": false
您按住 Ctrl 并单击不会直接导航到该文件,因为错误堆栈显示 http://localhost:9876/_karma_webpack_/src/app/app.component.spec.ts
而不是 src/app/app.component.spec.ts
。
您可以使用 this answer 中建议的选项,其中包括在 karma.conf.js
config
中指定 formatError
函数
formatError: (msg) =>
msg.replace(/http:\/\/localhost:9876\/_karma_webpack_\//g, '')
这将导致 karma 在格式化错误堆栈时使用上述方法(从堆栈跟踪中完全删除 http://localhost:9876/_karma_webpack_
)。
现在,至于为什么会这样,我不确定。我检查了一个旧的 angular 7 项目,它对 karma /jasmine/... 有旧的依赖关系,它像以前一样工作(即错误堆栈直接引用 src
中的文件)。
然后我将 karma、jasmine、karma-jasmine...升级到最新版本,它仍然有效。
当我升级到 angular 8 时,我开始遇到同样的问题。所以肯定有什么地方发生了变化,但我不知道在哪里
对于我的情况,必须将 angularCompilerOptions.strictTemplates 添加到 tsconfig.json
{
"compilerOptions": {
...
},
"angularCompilerOptions": {
"strictTemplates": true
}
}
将此添加到您的 tsconfig.json:
"angularCompilerOptions": {
"strictTemplates": true
}
为我工作,希望这有帮助!
我正在使用 Visual Studio 代码(版本 1.40.1)来处理我的 Angular 8 项目和 运行 Karma/Jasmine 通过命令 ng test
从其终端进行测试。当测试失败时,我总是能够通过终端 link 上的 Ctrl + click
跳转到相关的源文件,嵌入在堆栈跟踪中。几天后,这不再有效,而是打开了一个新的 Chrome 浏览器选项卡。
我认为问题可能与任何最近更新的 npm
软件包有关。因此,我创建了一个全新的 Angular 8 项目 (ng new
),在 app.component.spec.ts
中做了一个小改动并启动了 ng test
。不幸的是,那里也出现了同样的问题。完全卸载并重新安装 VSCode 也没有帮助。
知道如何恢复原来的功能(跳转到源代码)吗?
package.json
{
"name": "app",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "~8.2.13",
"@angular/common": "~8.2.13",
"@angular/compiler": "~8.2.13",
"@angular/core": "~8.2.13",
"@angular/forms": "~8.2.13",
"@angular/platform-browser": "~8.2.13",
"@angular/platform-browser-dynamic": "~8.2.13",
"@angular/router": "~8.2.13",
"rxjs": "~6.4.0",
"tslib": "^1.10.0",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.803.18",
"@angular/cli": "~8.3.18",
"@angular/compiler-cli": "~8.2.13",
"@angular/language-service": "~8.2.13",
"@types/node": "~8.9.4",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"codelyzer": "^5.0.0",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
"typescript": "~3.5.3"
}
}
karma.config.js
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, './coverage/app'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};
就我而言,我快疯了,它一天天停止工作。研究,我发现VS应用了自动更新,并禁用了一些 Angular 扩展,我不知道为什么? (在我的例子中,碰巧开发了一个 angular 8 应用程序)。
所以我的工作解决方案是扩展,按“@disabled”过滤并启用 angular - 或者你的情况 - 扩展
打开VsCode,按F1,搜索打开用户设置,点击打开用户设置。一个window会来。在左侧搜索终端并尝试将 allowchords 关闭为 false。
如果您看到的不是 window,而是 json。放:-
"terminal.integrated.allowChords": false
您按住 Ctrl 并单击不会直接导航到该文件,因为错误堆栈显示 http://localhost:9876/_karma_webpack_/src/app/app.component.spec.ts
而不是 src/app/app.component.spec.ts
。
您可以使用 this answer 中建议的选项,其中包括在 karma.conf.js
config
formatError
函数
formatError: (msg) =>
msg.replace(/http:\/\/localhost:9876\/_karma_webpack_\//g, '')
这将导致 karma 在格式化错误堆栈时使用上述方法(从堆栈跟踪中完全删除 http://localhost:9876/_karma_webpack_
)。
现在,至于为什么会这样,我不确定。我检查了一个旧的 angular 7 项目,它对 karma /jasmine/... 有旧的依赖关系,它像以前一样工作(即错误堆栈直接引用 src
中的文件)。
然后我将 karma、jasmine、karma-jasmine...升级到最新版本,它仍然有效。
当我升级到 angular 8 时,我开始遇到同样的问题。所以肯定有什么地方发生了变化,但我不知道在哪里
对于我的情况,必须将 angularCompilerOptions.strictTemplates 添加到 tsconfig.json
{
"compilerOptions": {
...
},
"angularCompilerOptions": {
"strictTemplates": true
}
}
将此添加到您的 tsconfig.json:
"angularCompilerOptions": {
"strictTemplates": true
}
为我工作,希望这有帮助!