Files
ic10emu/www/webpack.config.js
Rachel Powers fd114f42fc bind stack and register cell edits
cleanup prep for merge
2024-04-08 13:42:01 -07:00

115 lines
2.8 KiB
JavaScript

const CopyWebpackPlugin = require("copy-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const miniCssExtractPlugin = require("mini-css-extract-plugin");
const { SourceMap } = require("module");
const path = require("path");
module.exports = {
entry: "./src/ts/main.ts",
output: {
path: path.resolve(__dirname, "dist"),
filename: "main.js",
clean: true,
},
devServer: {
static: path.resolve(__dirname, "dist"),
port: 8080,
hot: true,
},
mode: "development",
devtool: "eval-source-map",
plugins: [
new CopyWebpackPlugin({
patterns: [
"img/*.png",
"img/*/*.png",
{ from: "data/database.json", to: "data" },
// Copy Shoelace assets to dist/shoelace
{
from: path.resolve(
__dirname,
"node_modules/@shoelace-style/shoelace/dist/assets",
),
to: path.resolve(__dirname, "dist/shoelace/assets"),
},
],
}),
new HtmlWebpackPlugin({ template: "./src/index.html" }),
new miniCssExtractPlugin(),
],
module: {
rules: [
{
test: /\.tsx?$/,
use: "ts-loader",
exclude: /node_modules/,
},
{
test: /\.(jpg|png|svg|gif)$/,
type: "asset/resource",
},
{
test: /\.css|\.s(c|a)ss$/,
use: [
{
// inject CSS to page
loader: miniCssExtractPlugin.loader,
},
{
// translates CSS into CommonJS modules
loader: "css-loader",
options: {
sourceMap: true,
},
},
{
// Run postcss actions
loader: "postcss-loader",
options: {
// `postcssOptions` is needed for postcss 8.x;
// if you use postcss 7.x skip the key
postcssOptions: {
// postcss plugins, can be exported to postcss.config.js
plugins: function () {
return [require("autoprefixer")];
},
},
},
},
{
// compiles Sass to CSS
loader: "sass-loader",
options: {
sourceMap: true,
},
},
],
// parser: {
// javascript : { importMeta: false }
// }
},
],
},
resolve: {
extensions: [".tsx", ".ts", ".js", ".json"],
fallback: {
crypto: require.resolve("crypto-browserify"),
buffer: require.resolve("buffer"),
stream: require.resolve("stream-browserify"),
vm: require.resolve("vm-browserify"),
},
},
experiments: {
asyncWebAssembly: true,
syncWebAssembly: true,
},
watchOptions: {
aggregateTimeout: 200,
poll: 200,
},
optimization: {
chunkIds: "named",
}
};