Repository navigation
Expand file tree
/
Copy pathkarma.webpack.js
More file actions
82 lines (80 loc) · 2.56 KB
/
Copy pathkarma.webpack.js
File metadata and controls
82 lines (80 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
const path = require('path');
const webpack = require('webpack')
// This is the webpack configuration for browser Karma tests with coverage.
module.exports = {
mode: 'development',
target: 'web',
output: {filename: 'bundle.js'},
resolve: {
extensions: ['.ts', '.js'],
fallback: {
// Enable the assert library polyfill because that is used in tests
"assert": require.resolve('assert/'),
"util": require.resolve('util/'),
// Only node-only platform code uses `path`; browser code paths never reach
// it. If that breaks: `TypeError: path.normalize is not a function`.
"path": false,
},
},
devtool: 'eval-source-map',
plugins: [
new webpack.ProvidePlugin({
// Not a global: only modules with a free `process` (such as util) get
// it. Absolute, since isolated installs hide `process` from those modules.
process: require.resolve('process/browser.js')
}),
// Benchmark.js checks for AMD's define function which doesn't exist in webpack.
// NOTE: This pollutes tests with a defined 'self.define' global.
new webpack.BannerPlugin({
banner: 'self.define = self.define || Object.assign(function(){}, {amd: false});',
raw: true
})
],
module: {
rules: [
{
// #platform resolves to src for the package under test only; dependencies
// keep their dist, as a global condition would resolve them to their src too.
include: path.resolve('src'),
resolve: { conditionNames: ['otel', '...'] },
},
{
test: /\.ts$/,
// transpileOnly: tsconfig.base.json sets `composite` but we never run
// `tsc -b`, so no `.tsbuildinfo` exists; ts-loader's default mode wants one.
use: { loader: 'ts-loader', options: { transpileOnly: true } },
},
{
test: /\.js$/,
exclude: {
and: [/node_modules/], // Exclude libraries in node_modules ...
not: [
// Except for a few of them that needs to be transpiled because they use modern syntax
/zone.js/,
],
},
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
}
},
},
{
enforce: 'post',
exclude: /(node_modules|\.test\.[tj]sx?$)/,
test: /\.ts$/,
use: {
loader: 'babel-loader',
options: {
plugins: ['babel-plugin-istanbul'],
}
},
},
],
},
};