From d6cbf4260a92df8c32d429e932d774a9b090a4ab Mon Sep 17 00:00:00 2001 From: fyears Date: Sat, 27 Nov 2021 14:45:46 +0800 Subject: [PATCH] esbuild is way faster --- esbuild.config.mjs | 35 ++++++++++++++++++++++++ package.json | 16 +++++++---- tsconfig.json | 1 + webpack.config.js | 68 ---------------------------------------------- 4 files changed, 46 insertions(+), 74 deletions(-) create mode 100644 esbuild.config.mjs delete mode 100644 webpack.config.js diff --git a/esbuild.config.mjs b/esbuild.config.mjs new file mode 100644 index 0000000..bce359b --- /dev/null +++ b/esbuild.config.mjs @@ -0,0 +1,35 @@ +import esbuild from "esbuild"; +import process from "process"; +// import builtins from 'builtin-modules' + +const banner = `/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ +`; + +const prod = process.argv[2] === "production"; + +esbuild + .build({ + banner: { + js: banner, + }, + entryPoints: ["./src/main.ts"], + bundle: true, + external: [ + "obsidian", + "electron", + "fs", + // ...builtins + ], + format: "cjs", + watch: !prod, + target: "es2016", + logLevel: "info", + sourcemap: prod ? false : "inline", + treeShaking: true, + minify: prod, + outfile: "main.js", + }) + .catch(() => process.exit(1)); diff --git a/package.json b/package.json index a9e797d..841ef88 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,17 @@ "version": "0.1.6", "description": "This is yet another sync plugin for Obsidian app.", "scripts": { - "dev": "webpack --mode development --watch", - "build": "webpack --mode production", + "dev": "node esbuild.config.mjs", + "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs 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'" }, + "browser": { + "path": "path-browserify", + "process": "process/browser", + "stream": "stream-browserify" + }, "source": "main.ts", "keywords": [], "author": "", @@ -19,19 +24,18 @@ "@types/mime-types": "^2.1.1", "@types/mocha": "^9.0.0", "@types/node": "^14.14.37", + "builtin-modules": "^3.2.0", "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "cross-env": "^7.0.3", + "esbuild": "^0.14.0", "mocha": "^9.1.3", "prettier": "^2.4.1", - "terser-webpack-plugin": "^5.2.4", "ts-loader": "^9.2.6", "ts-node": "^10.4.0", "tslib": "^2.2.0", "typescript": "^4.4.4", - "webdav-server": "^2.6.2", - "webpack": "^5.58.2", - "webpack-cli": "^4.9.1" + "webdav-server": "^2.6.2" }, "dependencies": { "@aws-sdk/client-s3": "^3.37.0", diff --git a/tsconfig.json b/tsconfig.json index 4618070..108a0f1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,6 +11,7 @@ // "allowSyntheticDefaultImports": true, "esModuleInterop": true, "importHelpers": true, + "isolatedModules": true, "lib": ["dom", "es5", "scripthost", "es2015"] }, "include": ["**/*.ts"] diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 7c17227..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,68 +0,0 @@ -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 })], - }, -};