diff --git a/package.json b/package.json index ca1e67f..297b985 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "lean4-game", "version": "0.1.0", + "type": "module", "private": true, "homepage": ".", "dependencies": { @@ -65,6 +66,7 @@ "start_server": "cd server && lake build && cross-env NODE_ENV=development nodemon -e mjs --exec \"node ./index.mjs\"", "start_client": "cross-env NODE_ENV=development vite --host", "build": "npm run build_server && npm run build_client", + "preview": "vite preview", "build_server": "cd server && lake build", "build_client": "cross-env NODE_ENV=production vite build", "production": "cross-env NODE_ENV=production node server/index.mjs" diff --git a/vite.config.ts b/vite.config.ts index 22aebf5..2c051d0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,6 +5,11 @@ import svgr from "vite-plugin-svgr" // https://vitejs.dev/config/ export default defineConfig({ + //root: 'client/src', + build: { + // Relative to the root + outDir: './dist', + }, plugins: [ react(), svgr({ diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index be3c8f6..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,106 +0,0 @@ -const path = require("path"); -const webpack = require('webpack'); -const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); -const WebpackShellPluginNext = require('webpack-shell-plugin-next'); - -module.exports = env => { - - const single_game = process.env.LEAN4GAME_SINGLE_GAME - - - const environment = process.env.NODE_ENV - const isDevelopment = environment === 'development' - - const babelOptions = { - presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'], - plugins: [ - isDevelopment && require.resolve('react-refresh/babel'), - ].filter(Boolean), - }; - - global.$RefreshReg$ = () => {}; - global.$RefreshSig$ = () => () => {}; - - return { - entry: [single_game ? "./client/src/index_local.tsx" : "./client/src/index.tsx"], - mode: isDevelopment ? 'development' : 'production', - module: { - rules: [ - { - test: /\.(js|jsx)$/, - exclude: [/server/, /node_modules/], - use: [{ - loader: require.resolve('babel-loader'), - options: babelOptions, - }] - }, - { - test: /\.tsx?$/, - use: [{ - loader: 'ts-loader', - options: { allowTsInNodeModules: true } - }], - // exclude: /node_modules(?!\/(lean4web|lean4|lean4-infoview))/, - // Allow .ts imports from node_modules/lean4web and node_modules/lean4 - }, - { - test: /\.css$/, - use: ["style-loader", "css-loader"] - }, - { - test: /\.(jpg|png)$/, - use: { - loader: 'file-loader', - }, - }, - ] - }, - resolve: { - extensions: ["*", ".js", ".jsx", ".tsx", ".ts"], - fallback: { - "http": require.resolve("stream-http") , - "path": require.resolve("path-browserify") - }, - }, - output: { - path: path.resolve(__dirname, "client/dist/"), - filename: "bundle.js", - }, - devServer: { - proxy: { - '/websocket': { - target: 'ws://localhost:8080', - ws: true - }, - '/import': { - target: 'http://localhost:3000', - router: () => 'http://localhost:8080', - }, - }, - static: path.join(__dirname, 'client/public/'), - port: 3000, - hot: true, - }, - devtool: "source-map", - plugins: [ - !isDevelopment && new WebpackShellPluginNext({ - onBuildEnd:{ - scripts: [ - // It's hard to set up webpack to copy the index.html correctly, - // so we copy it explicitly after every build: - 'cp client/public/index.html client/dist/', - // Similarly, I haven't been able to load `onigasm.wasm` properly: - 'cp client/public/onigasm.wasm client/dist/',], - blocking: false, - parallel: true - } - }), - isDevelopment && new ReactRefreshWebpackPlugin(), - ].filter(Boolean), - - // Webpack is not happy about the dynamically loaded widget code in the function - // `dynamicallyLoadComponent` in `infoview/userWidget.tsx`. If we want to support - // dynamically loaded widget code, we need to make sure that the files are available. - ignoreWarnings: [/Critical dependency: the request of a dependency is an expression/] - }; -}