Я использую Wallabyjs с Visual Studio, Angular 5, Webpack и Typescript.После того, как это произошло несколько раз, этот код был перенесен в репозиторий, хотя в спецификационных файлах была ошибка компиляции, я хотел активировать noEmitOnError с
compilerOptions.noEmitOnError = true;
compilerOptions.useStandardDefaults = true;
в моем файле конфигурации wallaby.js.К сожалению, сейчас я получаю три ошибки и не могу от них избавиться.(Без установки значения noEmitOnError в true все работает отлично!) Ошибки:
Postprocessor run failure: TypeScript compiler errors:
- Error C:/Users/[NAME]/AppData/Local/Temp/.wallaby/projects/.../somefile.ts: Cannot find module '@angular/platform-browser'.
- Error: Cannot find type definition file for 'jasmine'.
- Error: Cannot find type definition file for 'node'.
Файл, на который ссылается первая ошибка, - это обычный файл .ts с уменьшенным содержимым:
import { SafeUrl } from "@angular/platform-browser";
Если я удалю эту строку, ошибка исчезнет.И так как «нормальная» компиляция машинописи работает, то, пожалуй, излишне говорить, но в папке node_modules / @ types есть две папки для jasmine и node.
Есть идеи?Я искал в Интернете, но не нашел много. На одной странице Я нашел что-то вроде этого
Promise.all([System.import('@angular/core/testing'), System.import('@angular/platform-browser-dynamic/testing')])
.then(function (results) {
var testing = results[0];
var browser = results[1];
testing.setBaseTestProviders(
, но я понятия не имею, как сделать что-то подобное в моей установке с веб-пакетом и машинописью ...
Как это может помочь, вот моя конфигурация wallaby:
var wallabyWebpack = require('wallaby-webpack');
var path = require('path');
var compilerOptions = Object.assign(
require('./tsconfig.json').compilerOptions,
require('./src/tsconfig.spec.json').compilerOptions);
compilerOptions.module = 'CommonJs';
compilerOptions.noEmitOnError = true; // you may skip it if it's already set in tsconfig
compilerOptions.useStandardDefaults = true;
module.exports = function (wallaby) {
var webpackPostprocessor = wallabyWebpack({
entryPatterns: [
'src/wallabyTest.js',
'src/**/*spec.js'
],
module: {
rules: [
{ test: /\.css$/, loader: ['raw-loader', 'css-loader'] },
{ test: /\.html$/, loader: 'raw-loader' },
{ test: /\.ts$/, loader: '@ngtools/webpack', include: /node_modules/, query: { tsConfigPath: 'tsconfig.json' } },
{ test: /\.js$/, loader: 'angular2-template-loader', exclude: /node_modules/ },
{ test: /\.json$/, loader: 'json-loader' },
{ test: /\.styl$/, loaders: ['raw-loader', 'stylus-loader'] },
{ test: /\.less$/, loaders: ['raw-loader', 'less-loader'] },
{ test: /\.scss$|\.sass$/, loaders: ['raw-loader', 'sass-loader'] },
{ test: /\.(jpg|png)$/, loader: 'url-loader?limit=128000' }
]
},
resolve: {
extensions: ['.js', '.ts'],
modules: [
path.join(wallaby.projectCacheDir, 'src/app'),
path.join(wallaby.projectCacheDir, 'src'),
'node_modules'
]
},
node: {
fs: 'empty',
net: 'empty',
tls: 'empty',
dns: 'empty'
}
});
return {
files: [
{ pattern: 'src/**/*.+(ts|css|less|scss|sass|styl|html|json|svg)', load: false },
{ pattern: 'mocks/**/*.ts', load: false },
{ pattern: 'src/**/*.d.ts', ignore: true },
{ pattern: 'src/**/*spec.ts', ignore: true },
'!src/test.ts',
'!src/main.ts'
],
tests: [
{ pattern: 'src/**/*spec.ts', load: false },
{ pattern: 'src/**/*e2e-spec.ts', ignore: true }
],
testFramework: 'jasmine',
compilers: {
'**/*.ts': wallaby.compilers.typeScript(compilerOptions)
},
middleware: function (app, express) {
var path = require('path');
app.use('/favicon.ico', express.static(path.join(__dirname, 'src/favicon.ico')));
app.use('/assets', express.static(path.join(__dirname, 'src/assets')));
},
env: {
kind: 'chrome'
},
postprocessor: webpackPostprocessor,
setup: function () {
window.__moduleBundler.loadTests();
},
debug: false
};
};
И мой tsconfig.json выглядит так:
{
"compileOnSave": false,
"compilerOptions": {
"preserveSymlinks": true,
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"plugins": [
{
"name": "tslint-language-service",
"defaultSeverity": "error",
"ignoreDefinitionFiles": true
}
],
"lib": [
"es2017",
"dom"
]
}
}
Большое спасибо за любую помощь!Приветствия