monaco-editor/website/webpack.config.ts
2023-02-28 15:44:40 +01:00

152 lines
3.6 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as webpack from "webpack";
import * as path from "path";
import * as HtmlWebpackPlugin from "html-webpack-plugin";
import { CleanWebpackPlugin } from "clean-webpack-plugin";
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
import * as CopyPlugin from "copy-webpack-plugin";
const r = (file: string) => path.resolve(__dirname, file);
module.exports = {
entry: {
index: r("src/website/index.tsx"),
playgroundRunner: r("src/runner/index.ts"),
monacoLoader: r("src/website/monaco-loader-chunk.ts"),
},
optimization: {
runtimeChunk: "single",
},
output: {
path: r("dist"),
devtoolModuleFilenameTemplate: "file:///[absolute-resource-path]",
},
resolve: {
extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"],
},
devtool: "source-map",
devServer: {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods":
"GET, POST, PUT, DELETE, PATCH, OPTIONS",
"Access-Control-Allow-Headers":
"X-Requested-With, content-type, Authorization",
},
allowedHosts: "all",
watchFiles: [],
},
module: {
rules: [
{
test: /\.css$/,
use: [
/*"style-loader"*/ MiniCssExtractPlugin.loader,
"css-loader",
],
},
{
test: /\.scss$/,
use: [
/*"style-loader",*/ MiniCssExtractPlugin.loader,
"css-loader",
"sass-loader",
],
},
{
test: /\.(jpe?g|png|gif|eot|ttf|svg|woff|woff2|md)$/i,
loader: "file-loader",
},
{
test: /\.tsx?$/,
loader: "ts-loader",
options: { transpileOnly: true },
},
{ test: /\.txt$/i, use: "raw-loader" },
],
},
plugins: [
new webpack.DefinePlugin({
"process.env": {
YEAR: JSON.stringify(new Date().getFullYear()),
},
}),
new CleanWebpackPlugin(),
new MiniCssExtractPlugin({
filename: "[name].css",
chunkFilename: "[id].css",
}),
new HtmlWebpackPlugin({
chunks: ["monacoLoader", "index"],
templateContent: getHtml(),
chunksSortMode: "manual",
}),
new HtmlWebpackPlugin({
chunks: ["index"],
filename: "playground.html",
templateContent: getHtml(),
}),
new HtmlWebpackPlugin({
chunks: ["playgroundRunner"],
filename: "playgroundRunner.html",
templateContent: getHtml(),
}),
new HtmlWebpackPlugin({
chunks: ["index"],
filename: "docs.html",
templateContent: getHtml(),
}),
new HtmlWebpackPlugin({
chunks: ["index"],
filename: "monarch.html",
templateContent: getHtml(),
}),
new CopyPlugin({
patterns: [{ from: "./static", to: "./" }],
}),
new CopyPlugin({
patterns: [{ from: "./typedoc/dist", to: "./typedoc/" }],
}),
new CopyPlugin({
patterns: [
{
from: "./node_modules/monaco-editor/",
to: "./node_modules/monaco-editor/",
// This disables minification for js files
info: { minimized: true },
},
],
}),
new CopyPlugin({
patterns: [
{
from: "../node_modules/monaco-editor-core/",
to: "./node_modules/monaco-editor-core/",
// This disables minification for js files
info: { minimized: true },
},
],
}),
new CopyPlugin({
patterns: [{ from: "../out/languages/", to: "./out/languages/" }],
}),
],
} as webpack.Configuration;
function getHtml(): string {
return `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Monaco Editor</title>
</head>
<body>
</body>
</html>`;
}