forked from coder/code-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwebpack.general.config.js
More file actions
130 lines (128 loc) · 3.25 KB
/
Copy pathwebpack.general.config.js
File metadata and controls
130 lines (128 loc) · 3.25 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
const path = require("path");
const environment = process.env.NODE_ENV || "development";
const isCi = typeof process.env.CI !== "undefined";
const HappyPack = require("happypack");
const webpack = require("webpack");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const root = path.join(__dirname, "..");
module.exports = (options = {}) => ({
context: root,
devtool: "source-map",
// entry: "./packages/app/src/index.ts",
mode: isCi ? "production" : "development",
module: {
rules: [{
loader: "string-replace-loader",
test: /\.(j|t)s/,
options: {
multiple: [{
// These will be handled by file-loader. We need the location because
// they are parsed as URIs and will throw errors if not fully formed.
search: "require\\.toUrl\\(",
replace: "location.protocol + '//' + location.host + '/' + require('file-loader?name=[path][name].[ext]!' + ",
flags: "g",
}, {
search: "require\\.__\\$__nodeRequire",
replace: "require",
flags: "g",
}, {
search: "\\.attributes\\[([^\\]]+)\\] = ([^;]+)",
replace: ".setAttribute($1, $2)",
flags: "g",
}],
},
}, {
test: /\.(js)/,
exclude: /test/,
}, {
test: /\.(txt|d\.ts|test.ts|perf.data.js|jxs|scpt|exe|sh|less)$/,
use: [{
loader: "ignore-loader",
}],
}, {
// These are meant to run in separate pages, like the issue reporter or
// process explorer. Ignoring for now since otherwise their CSS is
// included in the main CSS.
test: /electron-browser.+\.html$|code\/electron-browser\/.+\.css$/,
use: [{
loader: "ignore-loader",
}],
}, {
test: /\.node$/,
use: "node-loader",
}, {
use: [{
loader: "happypack/loader?id=ts",
}],
test: /(^.?|\.[^d]|[^.]d|[^.][^d])\.tsx?$/,
}, {
// Test CSS isn't required. The rest is supposed to be served in separate
// pages or iframes so we don't need to include it here.
exclude: /test|code\/electron-browser\/.+\.css$/,
test: /\.s?css$/,
// This is required otherwise it'll fail to resolve CSS in common.
include: root,
use: [{
loader: MiniCssExtractPlugin.loader,
}, {
loader: "css-loader",
}, {
loader: "sass-loader",
}],
}, {
test: /\.(svg|png|ttf|woff|eot)$/,
use: [{
loader: "file-loader",
options: {
name: "[path][name].[ext]",
},
}],
}, {
test: /\.wasm$/,
type: "javascript/auto",
}],
noParse: /\/test\/|\.test\.jsx?|\.test\.tsx?|tsconfig.+\.json$/,
},
resolve: {
alias: {
"@coder": path.join(root, "packages"),
},
extensions: [".js", ".jsx", ".ts", ".tsx", ".json", ".css"],
mainFiles: [
"index",
"src/index",
],
},
resolveLoader: {
modules: [
path.join(root, "node_modules"),
],
},
plugins: [
new HappyPack({
id: "ts",
threads: 10,
loaders: [{
path: "ts-loader",
query: {
happyPackMode: true,
compilerOptions: options.typescriptCompilerOptions,
},
}],
}),
new webpack.DefinePlugin({
"process.env.NODE_ENV": `"${environment}"`,
"process.env.LOG_LEVEL": `"${process.env.LOG_LEVEL || ""}"`,
}),
new MiniCssExtractPlugin({
filename: "[name].css",
chunkFilename: "[id].css",
}),
],
// target: "web",
stats: {
all: false, // Fallback for options not defined.
errors: true,
warnings: true,
},
});