import path from "node:path"; import { fileURLToPath } from "node:url"; import { dirname } from "node:path"; import { CleanWebpackPlugin } from "clean-webpack-plugin"; import CopyWebpackPlugin from "copy-webpack-plugin"; import TsconfigPathsPlugin from "tsconfig-paths-webpack-plugin"; import webpack from "webpack"; import nodeExternals from "webpack-node-externals"; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); if (process.env.NODE_ENV == null) { process.env.NODE_ENV = "development"; } const ENV = (process.env.ENV = process.env.NODE_ENV); const moduleRules = [ { test: /\.ts$/, use: "ts-loader", exclude: path.resolve(__dirname, "node_modules"), }, { test: /\.node$/, loader: "node-loader", }, ]; const plugins = [ new CleanWebpackPlugin(), new CopyWebpackPlugin({ patterns: [{ from: "./src/locales", to: "locales" }], }), new webpack.DefinePlugin({ "process.env.BWCLI_ENV": JSON.stringify(ENV), }), new webpack.BannerPlugin({ banner: "#!/usr/bin/env node", raw: true, }), new webpack.IgnorePlugin({ resourceRegExp: /^encoding$/, contextRegExp: /node-fetch/, }), ]; const config = { mode: ENV, target: "node", devtool: ENV === "development" ? "eval-source-map" : "source-map", node: { __dirname: false, __filename: false, }, entry: { bwdc: "./src/bwdc.ts", }, optimization: { minimize: false, }, resolve: { extensions: [".ts", ".js", ".json"], plugins: [new TsconfigPathsPlugin({ configFile: "./tsconfig.json" })], symlinks: false, modules: [path.resolve("node_modules")], }, output: { filename: "[name].js", path: path.resolve(__dirname, "build-cli"), }, module: { rules: moduleRules }, plugins: plugins, externals: [nodeExternals()], }; export default config;