diff --git a/package.json b/package.json index 73115dd..400b033 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "This is yet another sync plugin for Obsidian app.", "scripts": { "dev": "node esbuild.config.mjs", - "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", + "build2": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", + "build": "webpack --mode production", "format": "npx prettier --write .", "clean": "npx rimraf main.js", "test": "cross-env TS_NODE_COMPILER_OPTIONS={\\\"module\\\":\\\"commonjs\\\"} mocha -r ts-node/register 'tests/**/*.ts'" @@ -39,7 +40,9 @@ "ts-node": "^10.4.0", "tslib": "^2.2.0", "typescript": "^4.4.4", - "webdav-server": "^2.6.2" + "webdav-server": "^2.6.2", + "webpack": "^5.64.4", + "webpack-cli": "^4.9.1" }, "dependencies": { "@aws-sdk/client-s3": "^3.37.0", diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..01e06ba --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,68 @@ +const path = require("path"); +const webpack = require("webpack"); +const TerserPlugin = require("terser-webpack-plugin"); + +module.exports = { + entry: "./src/main.ts", + target: "web", + output: { + filename: "main.js", + path: __dirname, + libraryTarget: "commonjs", + }, + plugins: [ + // Work around for Buffer is undefined: + // https://github.com/webpack/changelog-v5/issues/10 + new webpack.ProvidePlugin({ + Buffer: ["buffer", "Buffer"], + }), + new webpack.ProvidePlugin({ + process: "process/browser", + }), + ], + module: { + rules: [ + { + test: /\.tsx?$/, + use: "ts-loader", + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: [".tsx", ".ts", ".js"], + mainFields: ["browser", "module", "main"], + fallback: { + // assert: require.resolve("assert"), + // buffer: require.resolve("buffer/"), + // console: require.resolve("console-browserify"), + // constants: require.resolve("constants-browserify"), + crypto: require.resolve("crypto-browserify"), + // domain: require.resolve("domain-browser"), + // events: require.resolve("events"), + // http: require.resolve("stream-http"), + // https: require.resolve("https-browserify"), + // os: require.resolve("os-browserify/browser"), + path: require.resolve("path-browserify"), + // punycode: require.resolve("punycode"), + process: require.resolve("process/browser"), + // querystring: require.resolve("querystring-es3"), + stream: require.resolve("stream-browserify"), + // string_decoder: require.resolve("string_decoder"), + // sys: require.resolve("util"), + // timers: require.resolve("timers-browserify"), + // tty: require.resolve("tty-browserify"), + // url: require.resolve("url"), + // util: require.resolve("util"), + // vm: require.resolve("vm-browserify"), + // zlib: require.resolve("browserify-zlib"), + }, + }, + externals: { + obsidian: "commonjs2 obsidian", + }, + optimization: { + minimize: true, + minimizer: [new TerserPlugin({ extractComments: false })], + }, +};